[php] Problem z sesjami

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
cwiru
Nowy
Nowy
Posty: 41
Rejestracja: pt lut 27, 2004 1:47 pm
Lokalizacja: ze Śródziemia

[php] Problem z sesjami

Post 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
bth
Posty: 5
Rejestracja: wt sty 06, 2004 11:35 pm

Re: [php] Problem z sesjami

Post 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.
cwiru
Nowy
Nowy
Posty: 41
Rejestracja: pt lut 27, 2004 1:47 pm
Lokalizacja: ze Śródziemia

Re: [php] Problem z sesjami

Post 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ę ?
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: [php] Problem z sesjami

Post 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...
cwiru
Nowy
Nowy
Posty: 41
Rejestracja: pt lut 27, 2004 1:47 pm
Lokalizacja: ze Śródziemia

Re: [php] Problem z sesjami

Post autor: cwiru »

Wielkie dzięki za twoją pomoc wixor . Teraz już wszystko działa jak trzeba
Michał Fikus
Przelotem
Przelotem
Posty: 242
Rejestracja: sob cze 08, 2002 6:39 pm
Lokalizacja: Wejherowo

Re: [php] Problem z sesjami

Post 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.
Mlody_g4ce
Posty: 2
Rejestracja: pt paź 03, 2003 4:04 pm

Re: [php] Problem z sesjami

Post 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?
Michał Fikus
Przelotem
Przelotem
Posty: 242
Rejestracja: sob cze 08, 2002 6:39 pm
Lokalizacja: Wejherowo

Re: [php] Problem z sesjami

Post 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.
dzieciol4
Nowy
Nowy
Posty: 120
Rejestracja: pt sie 23, 2002 8:22 am
Lokalizacja: Szczecin

Re: [php] Problem z sesjami

Post 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
Michał Fikus
Przelotem
Przelotem
Posty: 242
Rejestracja: sob cze 08, 2002 6:39 pm
Lokalizacja: Wejherowo

Re: [php] Problem z sesjami

Post 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
dzieciol4
Nowy
Nowy
Posty: 120
Rejestracja: pt sie 23, 2002 8:22 am
Lokalizacja: Szczecin

Re: [php] Problem z sesjami

Post 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 :D a moj post jest zgodny z tematem pozniewaz zakladajacy ma problemy z zapisywanie ID sesji :)
Michał Fikus
Przelotem
Przelotem
Posty: 242
Rejestracja: sob cze 08, 2002 6:39 pm
Lokalizacja: Wejherowo

Re: [php] Problem z sesjami

Post 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ż?
dzieciol4
Nowy
Nowy
Posty: 120
Rejestracja: pt sie 23, 2002 8:22 am
Lokalizacja: Szczecin

Re: [php] Problem z sesjami

Post 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 :)
Michał Fikus
Przelotem
Przelotem
Posty: 242
Rejestracja: sob cze 08, 2002 6:39 pm
Lokalizacja: Wejherowo

Re: [php] Problem z sesjami

Post autor: Michał Fikus »

Przy braku odpowiedniego serwera to nie jest kwestia czasu czy kombinowania - wtedy skrypty trzeba pisać pod serwer.
dzieciol4
Nowy
Nowy
Posty: 120
Rejestracja: pt sie 23, 2002 8:22 am
Lokalizacja: Szczecin

Re: [php] Problem z sesjami

Post autor: dzieciol4 »

hmm ja pisze skrypty tak aby dzialaly na kazdym serwie bez wzgledu na jego konfiguracje... no ale zrobil nam sie troche OT :)
ODPOWIEDZ