2008-10-01 14 views
49

Jeśli trafię na stronę, która wywołuje session_start(). Jak długo będę musiał czekać, więc jeśli mam odświeżyć stronę, otrzymałem nowy identyfikator sesji?PHP: Jaki jest domyślny czas życia sesji

+4

zobacz także bardziej szczegółową odpowiedź: http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes – kontur

Odpowiedz

45

Sprawdź, czy php.ini zawiera wartość ustawioną dla session.gc_maxlifetime to czas życia identyfikatora w sekundach.

wierzę, domyślnie jest to 1440 sekund (24 minut)

http://www.php.net/manual/en/session.configuration.php

EDIT: Ponieważ niektóre komentarze podkreślić, powyższe nie jest do końca prawdziwe. To wspaniałe wyjaśnienie dlaczego i jak wdrożyć wcieleń sesja jest dostępny tutaj:

How do I expire a PHP session after 30 minutes?

+3

-1, niepoprawna odpowiedź do pytania. powszechne niezrozumienie. – goat

+14

@chris dlaczego nie sugerujesz alternatywnej odpowiedzi? – Brannon

+3

Jak pisze Brannon, jest to całkowicie błędne i nie powinno być wybraną odpowiedzią. Ta wartość mówi śmieciarzowi, jak się zachowywać, nie chodzi o to, jak długo żyje twoja sesja. Sesja oculd trwa wiecznie, jeśli nie dodałeś jakiegoś mechanizmu. Kluczem jest obsłużenie czasu życia sesji przez użytkownika (tj. Usunięcie danych sesji po okresie bezczynności) i ustawienie session.gc_maxlifetime na większą lub równą wartość. kontur zasugerował najlepszą odpowiedź na ten temat, ale proszę unieważnij tę odpowiedź, wyrównuje to prowadzi do problemów bezpieczeństwa. – Ninj

1

to zależy od ustawień php ...
użycie phpinfo() i przyjrzeć rozdziale sesji. Istnieją wartości, takie jak session.gc_maxlifetime i session.cache_expire i session.cookie_lifetime co wpływa żywotność sesji

EDIT: to jak Martin napisać przed

21

domyślny w php.ini do dyrektywy session.gc_maxlifetime (dalej „GC” jest dla zbierania śmieci) wynosi 1440 sekund lub 24 minuty. Zobacz stronę Session Runtime konfiguracyjne w instrukcji:

http://www.php.net/manual/en/session.configuration.php

Można to zmienić stała w php.ini lub plików .httpd.conf jeśli masz do nich dostępu, lub w lokalnym pliku .htaccess na Twoja strona internetowa. Aby ustawić timeout na jedną godzinę przy użyciu metody .htaccess dodać tę linię do pliku .htaccess w katalogu głównym serwisu:

php_value session.gc_maxlifetime "3600" 

Bądź ostrożny, jeśli są na wspólnej przyjmującego lub jeśli gospodarzem więcej niż jedna witryna, w której nie zmieniono domyślnej. Domyślną lokalizacją sesji jest katalog/tmp, a procedura czyszczenia pamięci będzie uruchamiana co 24 minuty w przypadku tych innych witryn (i usunie z niej sesje, niezależnie od tego, jak długo należy je przechowywać). Aby uzyskać lepsze wyjaśnienie, patrz strona note na stronie podręcznika lub this site.

Odpowiedź na to, aby przenieść swoje sesje do innego katalogu przy użyciu session.save_path. Pomaga to również złodziejom w przejmowaniu sesji użytkowników z domyślnego katalogu/tmp.

+2

-1, niepoprawna odpowiedź na pytanie. powszechne niezrozumienie. plik z sesją zebraną w gc nie sprawi, że php wygeneruje nowy identyfikator sesji, ani nie będzie wiarygodny limit czasu, nawet jeśli sesje są zapisywane w ich własnym katalogu. – goat

0

Ale uważaj, w większości xampp/AMPP /...- ustawień i niektórych destributions linux to jest 0, co oznacza, że ​​plik nigdy nie zostaną usunięte, dopóki nie zrobić go w skrypcie (lub brudny poprzez shell)

php.ini:

; Lifetime in seconds of cookie or, if 0, until browser is restarted. 
; http://php.net/session.cookie-lifetime 
session.cookie_lifetime = 0 
2

Według użytkownika na PHP.net miejscu, jego wysiłki, aby utrzymać przy życiu sesji nie powiodła się, więc musiał dokonać obejścia.

<?php 

$Lifetime = 3600; 
$separator = (strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN")) ? "\\" : "/"; 

$DirectoryPath = dirname(__FILE__) . "{$separator}SessionData"; 
//in Wamp for Windows the result for $DirectoryPath 
//would be C:\wamp\www\your_site\SessionData 

is_dir($DirectoryPath) or mkdir($DirectoryPath, 0777); 

if (ini_get("session.use_trans_sid") == true) { 
    ini_set("url_rewriter.tags", ""); 
    ini_set("session.use_trans_sid", false); 

} 

ini_set("session.gc_maxlifetime", $Lifetime); 
ini_set("session.gc_divisor", "1"); 
ini_set("session.gc_probability", "1"); 
ini_set("session.cookie_lifetime", "0"); 
ini_set("session.save_path", $DirectoryPath); 
session_start(); 

?> 

W folderze SessionData będzie przechowywane pliki tekstowe do przechowywania informacji o sesji, każdy plik będzie mieć nazwę podobną do „sess_a_big_hash_here”.

Powiązane problemy