bartek624
28.05.2012, 19:18:58
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
if (empty($_SESSION['uzytkownik'])) $_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
help_mee
29.05.2012, 05:36:01
Skąd wiesz, że sesja trwa. Pokaż jak to sprawdzasz (jakim skryptem)?
IProSoft
29.05.2012, 13:18:51
A może używasz Firefoxa, który potrafi zapamiętywać sesje nawet po wyłączeniu komputera?
bartek624
29.05.2012, 14:41:20
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 .
bartek624
29.05.2012, 19:32:04
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? ?
greycoffey
29.05.2012, 19:39:32
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
30.05.2012, 09:02:37
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:
<?php
if(empty($_SESSION['uzytkownik'])) {
$_SESSION['uzytkownik'] = 'nie_zalogowany';
}