Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyczyszczeniem sesji
Forum PHP.pl > Forum > PHP
Raph
Sprawa wygląda tak, że jest jedna podstrona na której zapisuje się i są wyświetlane dane z sesji. Potem jest druga podstrona na której jest tak samo - dokładniej chodzi o formularz, taki z paroma krokami.

Założyłem sobie, że na wypełnienie jest jakiś określony czas, po czym sesja wygasa i przekierowuje przy próbie przejścia do następnego kroku, do pierwszego kroku formularza. Oto część kodu odpowiedzialna za to (pierwszy krok formularza nie ma 'view', stąd ta część warunku.

CODE

ini_set("session.gc_maxlifetime","60");
ini_set("session.cookie_lifetime", "60");
ini_set("session.gc_probability", "100");

if(!isset($_REQUEST[session_name()]) && empty($_GET['view']))
{
session_start();
}

if(count($_SESSION) == 0 && !empty($_GET['view']))
{
header("Location: http://www.stronka.pl/katalog/zamowprogram.php5");
}


Problem polega na tym, że tablica $_SESSION nie zeruje się cała, co jest o tyle dziwne, że jak sesja wygasa (te 60 sekund to tylko dla moich testów), to ten drugi warunek jest spelniony i przekierowanie następuje, więc teoretycznie tablica jest pusta. Tylko, że jak już znajdę się w pierwszym kroku i wyświetlę sobie tablicę $_SESSION to są tam dane z drugiego kroku, gdy więc przejdę do drugiego kroku mam już coś wpisane, choć tak być nie powinno (jakim cudem ten warunek by się spełnił?)

Nie rozumiem co jest grane, chyba, że czegoś tutaj nie wiem.
nevt
  1. <?php
  2. if(!isset($_REQUEST[session_name()]) && empty($_GET['view']))
  3. ?>

jeżeli ten warunek się nie spełni to nie wywołujesz session_start(), no i wtedy count($_SESSION) = 0;
Raph
Tak jest (jeśli dobrze zrozumiałem to co napisałeś), tylko skąd nagle na pierwszej podstronie biorą się dane z sesji z drugiej podstrony, kóra wygasła, a nie ma danych z pierwszej podstrony?
nevt
wg tego co wyczytałem w manualu, to ustawienia rodzaju:
  1. <?php
  2. ini_set("session.gc_maxlifetime","60");
  3. ini_set("session.cookie_lifetime", "60");
  4. ini_set("session.gc_probability", "100");
  5. ?>

obowiązują tylko lokalnie dla skryptu w którym zostały wywołane, czyli albo musisz to na stałe wpisać do php.ini, abo wywoływać na początku każdego pliku w którym korzystasz z sesji...

EDIT:
czy ty przypadkiem nie stosujesz tego żeby mieć różne zestawy zmiennych sesji na różnych podstronach serwisu questionmark.gif jeżeli tak, to nie tędy droga, musisz skorzystać z sesji nazwanych:
w jednym pliku np.
  1. <?php
  2. session_name('strona_1');
  3. ?>

a w innym:
  1. <?php
  2. session_name('strona_2');
  3. ?>

i wtedy każda podstrona będzie miała swój niezależny zestaw zmiennych sesji
Raph
To jest wywołane na początku każdego skryptu, bo podstronki są po prostu przełączane za pomocą switcha z jednego pliku. Chyba, że to przekierowanie coś miesza?
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.