Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] session_destroy w includowanym pliku
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Mam 2 pliki: index.php i funkcje.php. W pewnym momencie jesli jest spelnony pewien warunek w index.php jest includowany plik funkcje.php. W funkcjach następuje session_destroy. Następnie, idąc linjkami kodu następuje warunek, ze jesli jest ustawiona sesja to wyswietla link do wylogowania. Schematycznie wyglada to tak:
  1. echo'<div id=glowna_zawartosc>
  2. //zawartosc glowna strony
  3. </div>';
  4.  
  5. //teraz jesli jest spelniony pewien warunek podpinany jest plik z funkcjami
  6. if(warunek){ include"funkcje.php"; }
  7. //a nastepnie jest panel logowania
  8. //jesli user jest zalogowany (jest sesja) to wyswietla:
  9. echo'<div id=link_wyloguj>
  10. //link wyloguj
  11. </div>';
  12.  
  13. //jesli user nie jest zalogowany to wyswietla panel logowania:
  14. echo'<div id=panel_logowania>
  15. //panel logowania
  16. </div>';

W pliku funkcje.php nastepuje zniszczenie sesji session_destroy();
I logicznie rzecz biorąc po tym zniszczeniu sesji w funkcje.php nie powinien sie wyswietlac link do wylogowania w pliku index.php skoro warunek sprawdzajacy czy user jest zalogowany znajduje sie ponizej include"funkcje.php". Niestety tak sie nie dzieje. Dopiero po odswiezeniu strony php wykrywa ze uprzednio sesje zniszczono.
Robie gdzies blad? Czy nie doczytalem zasad dzialania sesji?
michaJlS
w manualu jest napisane:
"session_destroy() niszczy wszystkie dane skojarzone z bieżącą sesją. Nie usuwa żadnych globalnych zmiennych związanych z sesją. Nie usuwa też ciasteczka sesyjnego."
więc nie usuwa tablicy $_SESSION , a pewnie przy jej użyciu sprawdzasz, czy uzyszkodnik jest zalogowany. Spróbuj może session_unset() albo unset() na konkretnym elemencie tablicy $_SESSION.
erix
A co jest w manualu, żeby sesję dobrze zniszczyć? ;]
  1. $_SESSION = array();
sadistic_son
erix dzięki, nie doczytałem tego do końca.

Powinno być tak:
  1. $_SESSION = array()
  2. unset($_SESSION['whatever'])
I teraz to daje zamierzony przeze mnie efekt.

Ten fragment wyjaśnia wszystko:
Cytat
But if you are intent upon using session_destroy(), know that it only empties out the variables when the page is reloaded or redirected to some other page. As long as it's the same page, the variables are still usable after invoking session_destroy().
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.