Strona 1 z 2
[php] Problem z sesjami
: ndz lut 29, 2004 2:55 pm
autor: cwiru
Kod PHP :
<?
session_start();
if (!isset($il)) $il = 0;
session_register("il");
++$il;
echo $il;
?>
Po wywołaniu mam takie oto komunikaty :
Warning : session_start(); open(/tmp\sess_98cf7dd40133876eaad312f1237b1519,O_RDWR) failed: No such file or directory (2) in c:\program files\apache group\apache\htdocs\sesje.php on line 2
Warning : session_start(); Cannot send session cookie - headers already sent by (output started at c:\program files\apache group\apache\htdocs\sesje.php:2 ) in c:\program files\apache group\apache\htdocs\sesje.php on line 2
Warning : session_start(); Cannot send session cache limiter - headers already sent (output started at c:\program files\apache group\apache\htdocs\sesje.php:2 ) in c:\program files\apache group\apache\htdocs\sesje.php on line 2
Warning: Unknown(); Your script possibly relies on a session-side effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data , unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off,respectively. in Unknown on line 0.
Warning: Unknown(); open(/tmp\sess_98cf7dd40133876eaad312f1237b1519,O_RDWR) failed: No such file or directory (2) in Unknown on line 0.
Warning: Unknown(); Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0.
Czy aby pozbyć się tych błędów konieczne jest zmiana jakichś parametrów w konfiguracji Apache lub PHP ?
Będę wdzięczny za pomoc
Re: [php] Problem z sesjami
: pn mar 01, 2004 10:30 am
autor: bth
Witam,
śmieci po wywołaniu session_start() wynikają z tego, że funkcja próbuje zapisać plik sesji w katalogu /tmp (linuxowy default), a że nie masz takiego katalogu - nie udaje jej się.
Aby ustawić odpowiedni katalog (np. "c:\tmp\") użyj funkcji:
[php]<?php
session_save_path('c:\katalog_z_tempami")
?>[/php]
z odpowiednim argumentem.
Poza tym, lepiej bierz wartości zmiennych w sesji z tablicy $_SESSION (dawniej $HTTP_SESSION_VARS), bo korzystanie z globalsów typu $zmienna może się potem zemścić.
Aha, no i może... zacznij czytać komunikaty błędów, bo to klasyczny RTFM był
Pozdrawiam
Bartek Muracki
http://www.reggaenet.pl -> najwiekszy w polsce serwis o muzyce reggae
http://www.siodemki.com -> winylowe płyty reggae i dancehall. sprawdź to.
Re: [php] Problem z sesjami
: pn mar 01, 2004 5:35 pm
autor: cwiru
Dzięki Bartek
Zrobiłem ten katalog tmp i jakoś ten skrypt w końcu poszedł. Mam jednak jeszcze kolejne 2 pytania :
1. Czy plik php może zaczynać się i kończyć jak każdy plik html (tagi <html> i <body>) ? Bo gdy występowały powyższy skrypt nie chciał działać wyświetlając :
Warning : session_start(); Cannot send session cookie - headers already sent by (output started at ... oraz
Warning : session_start(); Cannot send session cache limiter - headers already sent (output started at ...
Bez tych tagów skrypt działał
2. Czy wykonanie powyższego skryptu powinno przy każdym odświeżeniu strony powiększać $il o 1 i pokazywać aktualną wartość ? U mnie cały czas jest $il=1. Czy może się mylę ?
Re: [php] Problem z sesjami
: pn mar 01, 2004 9:21 pm
autor: wixor
1.Sesja jest realizowana za pomocą ciasteczek. Zgodnie z wymaganiami protokołu HTTP/1.1 te muszą zostać wysłane przed jakąkolwiek treścią - a więc również znacznikami <html> czy jakimikolwiek innymi. W celu użycia tego jednocześnie należy najpierw "wysłać sesję" a później treść strony. Czyli:[php]<?php
session_start();
//blablabla czyli set_cookie(), header() i tym podobne
?>
<html>
<!----- blablabla czyli treść strony --->
<?php
//blablabla czyli znowu trochę php
?>
<!----- blablabla czyli treść strony --->
</html>
<?php
//blablabla czyli znowu trochę php
?>[/php]
2. Prawdopodobnie błąd występuje ponieważ za każdym wywołaniem strony rejestrujesz na nowo $il. Należy to robić jeden raz - wtedy, kiedy $il nie istnieje. Czyli:[php]<?php
if(!isset($_SESSION["il"])) session_register("il");
echo ++$_SESSION["il"];
?>[/php] Przypominam o używaniu $_SESSION (tak samo zresztą jak $_GET $_POST i innych). Korzystanie z register_globals to wsadzanie palca do kontaktu. Szanse przyżycia są niewielkie...
Re: [php] Problem z sesjami
: pn mar 01, 2004 10:47 pm
autor: cwiru
Wielkie dzięki za twoją pomoc wixor . Teraz już wszystko działa jak trzeba
Re: [php] Problem z sesjami
: wt mar 02, 2004 4:34 pm
autor: Michał Fikus
Na Twoim miejscu poczytałbym o buferowaniu wyjścia - to rozwiązałoby ten problem oraz otworzyło nowe możliwości w dalszym pisaniu skryptów.
Re: [php] Problem z sesjami
: wt mar 02, 2004 11:41 pm
autor: Mlody_g4ce
A z tym html to nie lepiej sobie napisac drugi pliczek np wyswietlj.php z kodem
[php]
<?
function naglowek_html($tytul)
{
//LADUJE NAGOLWEK HTML LOGO ETC
?>
<html> i takie tam bajerki:)
<?
if($tytul)
nagłowek_html($tytul);
}
?>
[/php]
Takim sposobem unikasz wciaz wpisywania na roznych stronach tego samoego kodu html ktory zasmieca kod php....
Zeby wykonac ten kod wyzej piszesz
[php]
<?
require_once("wyswietl.php");
naglowek_html("");
?>
[/php]
I juz ci wykonuje funkcje zdeklarowana we wczesniejszym pliku... Czy nie wyrazniejszy zapis?
Re: [php] Problem z sesjami
: śr mar 03, 2004 3:02 pm
autor: Michał Fikus
Mlody_g4ce: nie pomyliłeś tematu?
A odnośnie Twojego skryptu, nie opłaca się czegoś takiego robić - po co deklarować kolejne funkcje, wczytywać od nowa pliki?
Jeśli jednak bardzo zależy nam na oddzieleniu kodu HTML od PHP to używamy w takiej sytuacji szablonów.
Re: [php] Problem z sesjami
: czw mar 04, 2004 9:42 am
autor: dzieciol4
tak a teraz mozna zrobic handlery dla sesji

jak to ulatwia prace z sesja

przyjrzyj sie w manualu funkcji save_session_handler(), a i polecalbym jednak trzymanie sesji w bazie danych a nie w plikach bo po 1. bezpieczniej, po 2. latwiej w dostosowaniu samemu do swoich potrzeb po 3. straty wynikajace z obciazenia bazy w stosunku do trzymania plikow sa na granicy bledu statystycznego
Re: [php] Problem z sesjami
: czw mar 04, 2004 3:49 pm
autor: Michał Fikus
dzieciol4 - nie ma po co polecać bazy danych, z dwóch prostych przyczyn:
1) użytkownik może nie mieć bazy danych;
2) nie to jest tematyką postu
Re: [php] Problem z sesjami
: sob mar 06, 2004 1:48 pm
autor: dzieciol4
michal -> sens polecenia dobrego rozwiazania zawsze jest

handlery obsluguja oczywiscie tez pliki w dowolnym miejscu wiec polecenie handlerow jest na miejscu i polecenie bazy tez

a moj post jest zgodny z tematem pozniewaz zakladajacy ma problemy z zapisywanie ID sesji

Re: [php] Problem z sesjami
: sob mar 06, 2004 3:09 pm
autor: Michał Fikus
Problem był z samą procedurą zapisu a nie z miejscem zapisu. Co do sensu - czy gdy musisz kupić samochód, masz do dyspozycji tylko 60.000 zł patrzysz na te, które kosztują 1.000.000 i wzwyż?
Re: [php] Problem z sesjami
: pn mar 08, 2004 8:46 am
autor: dzieciol4
michal moglibysmy tak dlugo o tym rozmawiac

a moze nieraz jest warto wziac od razu samochod za 100.000 zł majac 60.000 zł bo pozniej ominie sie kosztowne naprawy i inne dodatkowe koszty ?

to samo z sesjami, mozna przeciez id sesji trzymac w katalogu dostepnym przez wszystkich na serwerze /tmp

lub pokombinowac, stracic troche czasu i zrobic to pozadnie

Re: [php] Problem z sesjami
: pn mar 08, 2004 6:41 pm
autor: Michał Fikus
Przy braku odpowiedniego serwera to nie jest kwestia czasu czy kombinowania - wtedy skrypty trzeba pisać pod serwer.
Re: [php] Problem z sesjami
: wt mar 09, 2004 12:23 pm
autor: dzieciol4
hmm ja pisze skrypty tak aby dzialaly na kazdym serwie bez wzgledu na jego konfiguracje... no ale zrobil nam sie troche OT
