Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niekończąca się sesja
Forum PHP.pl > Forum > Przedszkole
bartek624
Witam, dopiero uczę się pisania w php i napotkałem na problem do którego nigdzie nie mogę znaleźć podpowiedzi. Chodzi o to że napisałem system logowania w którym po zweryfikowaniu użytkownika do zmiennej sesyjnej 'uzytkownik' zapisywany jest jego login. Wszystko świetnie działa tylko że jeśli użytkownik się nie wyloguje (funkcja wylogowująca niszczy sesje) to sesja trwa nawet po ponownym włączeniu komputera . czytałem ze sesja powinna 'ulegać samozniszczeniu' po zamknięciu strony/przeglądarki ale u mnie tak nie jest. używam KrasnalServ a tu kilka skryptów i część php.ini:

zwykły session_start
  1. session_register("uzytkownik");
  2. if (empty($_SESSION['uzytkownik']))
  3. $_SESSION['uzytkownik']='nie_zalogowany';



php.ini
Kod
session.save_handler = files
session.save_path =c:\usr\sesje
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_maxlifetime = 1440


Pomocy wink.gif
help_mee
Skąd wiesz, że sesja trwa. Pokaż jak to sprawdzasz (jakim skryptem)?
IProSoft
A może używasz Firefoxa, który potrafi zapamiętywać sesje nawet po wyłączeniu komputera?
bartek624
To że sesja trwa wiem bo po zalogowaniu (przypisaniu do zmiennej sesyjnej 'uzytkownik' loginu użytkownika) i wyłączeniu przeglądarki, Krasnalserva i potem komputera to po 12 godzinach jak włączyłem kompa , krasnalserva i wszedłem na stronkę to nadal byłem zalogowany ($_SESSION['uzytkownik'] nadal miało wartość loginu). A używam google chrome'a .
greycoffey
Bo się nie wylogowałeś?
bartek624
No ale jeśli dobrze wszystko rozumiem (co jest raczej mało prawdopodobne) to sesja powinna się zniszczyć po zamknięciu przeglądarki? A jeśli źle rozumiem to co zrobić żeby tą sesje zniszczyć po jakimś czasie lub właśnie po wyjściu z przeglądarki? ? wink.gif
greycoffey
Kurczę, do tego momentu wydawało mi się, że swietnie znam zagadnienie sesji i jej domyślnej implementacji w PHP. Nigdzie nie mogę znaleźć szczegółów na jakiej podstawie ta sesja miałaby wygasać po wyłaczeniu przeglądarki. Identyfikator to ciastko jak każde inne, przeglądarka nie ma jakiś triggerów informujących strony, że je opuszcza, przecież co będzie w przypadku zaniku prądu?

Jedyne co mi przychodzi do myśli, to czas życia ciastka oraz sesji. Garbage collector uruchamia się co X/Y żądańi sprząta wszystko powyżej Z sekund - tzn:
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
Tzn. jest 1% szans, że podczas jednego uruchomienia sesji funkcją session_start() dla jakiejkolwiek sesji (nie musi być to ta, która przemija), sesje które przkroczyły czas 1440s od ostatniej (akcji? modyfikacji?) są sprzątane. W twoim przypadku garbage collector mógł się po porstu nie wywołać.
by_ikar
Czas życia ciastka jest tutaj istotny. Sprawdź w chrome (f12 -> zakładka resoruces -> cookies) jaki jest czas życia tego ciastka. Jeżeli Expires jest równe Session, to po zamknięciu przeglądarki ciastko powinno się samo usunąć. Jeżeli ma inną wartość niż Session, to znaczy że czas podczas tworzenia ciasteczka sesyjnego jest inny. Aby ciastko się kasowało podczas zamykania przeglądarki lifetime musi być równe 0.

Spróbuj przed session_start, wywołać session_set_cookie_params z parametrem 0. Czyli:

  1. <?php
  2.  
  3. session_register('uzytkownik');
  4. if(empty($_SESSION['uzytkownik']))
  5. {
  6. $_SESSION['uzytkownik'] = 'nie_zalogowany';
  7. }
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.