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?

È stato utile?

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:

Come posso scadere una sessione PHP dopo 30 minuti?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top