¿Por qué se establece session.cookie_lifetime en 23 días? [cerrado]

9

Según tengo entendido, la duración de la sesión en Drupal está limitada por la session.gc_maxlifetimeconfiguración predeterminada de unos 2,3 días.

Entonces, ¿de qué sirve session.cookie_lifetimeestar configurado en 23 días?

Aquí está el fragmento de settings.php:

/**
 * Set session lifetime (in seconds), i.e. the time from the user's last visit
 * to the active session may be deleted by the session garbage collector. When
 * a session is deleted, authenticated users are logged out, and the contents
 * of the user's $_SESSION variable is discarded.
 */
ini_set('session.gc_maxlifetime', 200000);

/**
 * Set session cookie lifetime (in seconds), i.e. the time from the session is
 * created to the cookie expires, i.e. when the browser is expected to discard
 * the cookie. The value 0 means "until the browser is closed".
 */
ini_set('session.cookie_lifetime', 2000000);

Supongamos que he establecido ambos session.gc_probabilityy session.gc_divisor 1 por el simple hecho de esta pregunta.

usuario5858
fuente
¿Porque no quieres que una galleta desaparezca misteriosamente? ¿Desea que esté allí para que la sesión se pueda invalidar con gracia? ¿Te está causando algún problema real?
Mołot
Eso es entonces. Pero, ¿no sería una mejor idea hacer que la cookie caduque a las 40 horas y la sesión del servidor a las 51 horas? Me refiero a que la vida útil de las cookies es inferior al tiempo de caducidad del servidor.
user5858
Esto se basa principalmente en la opinión y solo los autores de PHP realmente pueden decirlo. Ah, y depende del controlador de sesión que hayas decidido usar. Pero, por lo general, no, no desea una sesión que se suponga que esté activa y que se pueda usar durante X horas más sin que nadie la use debido a la falta de cookies. Es un desperdicio de almacenamiento. Dejar la cookie más tiempo significa que casi siempre hay alguien que puede usar los datos de sesión guardados en el servidor, por lo que no se conserva ningún dato de sesión.
Mołot

Respuestas:

16

ini_set ('session.gc_maxlifetime', 200000);

  1. Este valor es para el servidor.
  2. Es una configuración para la recolección de basura de sesión.
  3. Si la última visita de los usuarios ocurrió antes de 200000, esta sesión es elegible para la recolección de basura.
  4. Como se trata de GC, el valor de la sesión puede descartarse y no ser obligatorio. Si una acción de GC ocurre después de que la sesión se hizo elegible para el GC, se eliminará.
ini_set('session.cookie_lifetime', 2000000);
  1. Este valor es para el navegador.

  2. Este es el tiempo máximo absoluto hasta que un navegador puede mantener esta cookie activa.

  3. Un valor 0 aquí significa inmediato o cuando el navegador está cerrado.

Para responder a su pregunta en particular.

  1. Si el usuario no vuelve al servidor en 2.3 días, su sesión se eliminará cuando se ejecute la recolección de basura de la sesión.
  2. Si sigue presionando una página en el servidor cada 2.2 (menos de 2.3 días), su sesión se mantendrá activa. Pero puede estar activo solo hasta 23 días desde el momento en que se generó la sesión por primera vez.
  3. Entonces, lo que eso significa es session.cookie_lifetimela duración máxima absoluta de una sesión.
Gokul NK
fuente
1
Tenga en cuenta el recolector de basura probabilístico. Más detalles: stackoverflow.com/a/1270960 .
digitgopher
Gran respuesta, también se puede hacer en php.ini si tiene acceso a que en su servidor por ejemplo, en /etc/php/5.6/fpm/php.iniajustar (o añadir) de ajuste: session.gc_maxlifetime = 2000000. Gracias.
therobyouknow