PHP: qual è la durata predefinita di una sessione
Domanda
Se colpisco una pagina che chiama session_start ()
. Quanto tempo dovrei aspettare, in modo che se dovessi aggiornare la pagina, mi è stato assegnato un nuovo ID sessione?
Soluzione
Dai un'occhiata a php.ini, il valore impostato per session.gc_maxlifetime è la durata dell'ID in secondi.
Credo che il valore predefinito sia 1440 secondi (24 minuti)
http://www.php.net/manual/en/session. configuration.php
Modifica: Come alcuni commenti sottolineano, quanto sopra non è del tutto esatto. Una meravigliosa spiegazione del perché e di come implementare la durata della sessione è disponibile qui:
Altri suggerimenti
Il valore predefinito in php.ini per la direttiva session.gc_maxlifetime
(la " gc " è per la garbage collection) è 1440 secondi o 24 minuti. Vedi la pagina di configurazione della runtime della sessione nel manuale:
http://www.php.net/manual/en/session. configuration.php
È possibile modificare questa costante nei file php.ini o .httpd.conf se si ha accesso ad essi o nel file .htaccess locale sul proprio sito Web. Per impostare il timeout su un'ora utilizzando il metodo .htaccess, aggiungi questa riga al file .htaccess nella directory principale del sito:
php_value session.gc_maxlifetime "3600"
Prestare attenzione se ci si trova su un host condiviso o se si ospita più di un sito in cui non è stato modificato il valore predefinito. Il percorso di sessione predefinito è la directory / tmp e la routine di garbage collection verrà eseguita ogni 24 minuti per questi altri siti (e cancellerà le sessioni nel processo, indipendentemente dal tempo in cui devono essere ) . Vedi la note nella pagina del manuale o questo sito per una spiegazione migliore.
La risposta a questo è spostare le sessioni in un'altra directory usando session.save_path. Questo aiuta anche a impedire ai cattivi di dirottare le sessioni dei visitatori dalla directory predefinita / tmp.
Secondo un utente su PHP.net sito, i suoi sforzi per mantenere viva la sessione fallito, quindi ha dovuto fare una soluzione alternativa.
<?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();
?>
Nella cartella SessionData verranno memorizzati file di testo per contenere le informazioni sulla sessione, ogni file avrà un nome simile a " sess_a_big_hash_here " ;.
dipende dalle tue impostazioni php ...
usa phpinfo ()
e dai un'occhiata al capitolo della sessione. Esistono valori come session.gc_maxlifetime
e session.cache_expire
e session.cookie_lifetime
che influiscono sulla durata delle sessioni
EDIT: è come Martin scriveva prima
Ma attenzione, sulla maggior parte delle configurazioni di xampp / ampp /...- e su alcune distribuzioni di Linux è 0, il che significa che il file non verrà mai cancellato finché non lo si fa all'interno del proprio script (o sporco tramite 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
Puoi usare qualcosa come ini_set ('session.gc_maxlifetime', 28800); // 8 * 60 * 60
.