2008-10-01 22 views
49

Si lo golpeo una página que pide session_start(). ¿Cuánto tiempo tendría que esperar para que, si tuviera que actualizar la página, me emitieran una nueva ID de sesión?PHP: ¿Cuál es la duración predeterminada de una sesión

+4

ver también para una respuesta más detallada: http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes – kontur

Respuesta

45

Salida php.ini al valor establecido para session.gc_maxlifetime es la vida útil de identificación en cuestión de segundos.

Creo que el valor predeterminado es de 1440 segundos (24 minutos)

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

Editar: Como algunos comentarios señalan, lo anterior no es del todo exacta. Una maravillosa explicación de por qué y cómo implementar cursos de la vida de la sesión está disponible aquí:

How do I expire a PHP session after 30 minutes?

+3

-1, no es una respuesta correcta a la pregunta. Malentendido común. – goat

+14

@chris ¿por qué no sugieres una respuesta alternativa? – Brannon

+3

Como Brannon escribe, esto está completamente mal y no debería ser la respuesta seleccionada. Este valor le dice al recolector de basura cómo comportarse, no se trata de cuánto tiempo dura su sesión. Una sesión oculta en vivo para siempre si no agregaste algún mecanismo. La clave es manejar la duración de la sesión por su cuenta (es decir, eliminar los datos de la sesión después de un período de inactividad) y establecer session.gc_maxlifetime a un valor mayor o igual. kontur sugirió la mejor respuesta sobre este punto, pero por favor desvalorice esta respuesta, ya que los resultados conducen a problemas de seguridad. – Ninj

1

que depende de la configuración de php ...
uso phpinfo() y echar un vistazo en el capítulo sesión. Hay valores como session.gc_maxlifetime y session.cache_expire y session.cookie_lifetime que afecta a la vida útil sesiones

EDIT: es como Martin escribir antes

21

El valor por defecto en el php.ini para la directiva session.gc_maxlifetime (el "GC" es para la recolección de basura) es 1440 segundos o 24 minutos. Ver la página de sesión en tiempo de ejecución Configuation en el manual:

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

Puede cambiar esta constante en el php.ini o archivos .httpd.conf si tiene acceso a ellos, o en el archivo .htaccess local su página web. Para establecer el tiempo de espera de una hora utilizando el método .htaccess, agregue esta línea al archivo .htaccess en el directorio raíz del sitio:

php_value session.gc_maxlifetime "3600" 

tener cuidado si usted está en un servidor compartido o si se alberga más de un sitio donde no ha cambiado el valor predeterminado. La ubicación de sesión predeterminado es el directorio/tmp, y la rutina de recolección de basura se ejecuta cada 24 minutos para que estos otros sitios (y acabar con sus sesiones en el proceso, independientemente del tiempo que deben ser mantenidos). Ver el note en la página manual o this site para una mejor explicación.

La respuesta a esto es mover sus sesiones a otro directorio utilizando session.save_path. Esto también ayuda a evitar que los tipos malos asalten sus sesiones de visitantes del directorio predeterminado/tmp.

+2

-1, no es una respuesta correcta a la pregunta. Malentendido común. un archivo de sesión recopilado de gc no hará que php genere una nueva identificación de sesión, ni el límite de tiempo es confiable incluso cuando las sesiones se guardan en su propio directorio. – goat

0

Pero cuidado, en la mayoría de las configuraciones /...- xampp/AMPP y algunos destributions Linux Es 0, lo que significa que el archivo nunca se eliminan hasta que lo haga dentro de la secuencia de comandos (o sucio a través de la cáscara)

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

de acuerdo a un usuario en PHP.net sitio, sus esfuerzos para mantener viva la sesión fallido, lo que tuvo que hacer una solución.

<?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(); 

?> 

En carpeta SessionData se almacenará archivos de texto para la celebración de información de la sesión, cada archivo sería tener un nombre similar a "sess_a_big_hash_here".

Cuestiones relacionadas