PHP: Qual é a vida útil padrão de uma sessão
Pergunta
Se eu acertar uma página que chama session_start()
. Quanto tempo eu teria que esperar, de modo que se eu fosse para atualizar a página, I foi emitido um novo ID de sessão?
Solução
Confira php.ini o conjunto valor para session.gc_maxlifetime é a vida ID em segundos.
Eu acredito que o padrão é 1440 segundos (24 minutos)
http://www.php.net/manual/en/session. configuration.php
Editar: Como alguns comentários apontam, o acima não é totalmente preciso. Uma explicação maravilhosa de por que, e como implementá-vidas sessão está disponível aqui:
Outras dicas
O padrão nas php.ini para a directiva session.gc_maxlifetime
(o "gc" é para coleta de lixo) é de 1440 segundos ou 24 minutos. Veja a página de Sessão Runtime Configuation no manual:
http://www.php.net/manual/en/session. configuration.php
Você pode alterar essa constante no php.ini ou .httpd.conf arquivos se você tem acesso a eles, ou no arquivo .htaccess local no seu web site. Para definir o tempo limite de uma hora usando o método .htaccess, adicione esta linha ao arquivo .htaccess no diretório raiz do site:
php_value session.gc_maxlifetime "3600"
Tenha cuidado se você estiver em um servidor compartilhado ou se hospedar mais de um site onde você não tiver alterado o padrão. A localização sessão padrão é o diretório / tmp, ea rotina de coleta de lixo será executado a cada 24 minutos para esses outros sites (e acabar com as suas sessões no processo, independentemente de quanto tempo eles deve ser mantido) . Veja a nota na página do manual ou neste site para uma explicação melhor.
A resposta para isso é mover suas sessões para outro diretório usando session.save_path. Isso também ajuda a prevenir maus seqüestro sessões dos seus visitantes do diretório padrão / tmp.
De acordo com um usuário em PHP.net local, seus esforços para manter a sessão viva falhou, então ele teve que fazer uma solução 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();
?>
Em sessiondata pasta serão armazenados arquivos de texto para a realização de informações da sessão, cada arquivo seria ter um nome semelhante a "sess_a_big_hash_here".
depende de suas configurações do PHP ...
usar phpinfo()
e dar uma olhada no capítulo sessão. Há valores como session.gc_maxlifetime
e session.cache_expire
e session.cookie_lifetime
que afeta a vida útil sessões
EDIT: é como Martin escrita antes
Mas cuidado, na maioria dos xampp / AMPP /...- configurações e alguns destributions linux que é 0, o que significa que o arquivo nunca vai ficar excluído até que você fazê-lo dentro de seu roteiro (ou sujo via 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
Você pode usar algo como ini_set('session.gc_maxlifetime', 28800); // 8 * 60 * 60
também.