Por que session.cookie_lifetime está definido para 23 dias? [fechadas]

9

Pelo que entendi, o tempo de vida da sessão no Drupal é limitado, pois, session.gc_maxlifetimepor padrão, é definido como 2,3 dias.

Então, qual é a utilidade de session.cookie_lifetimeser definido para 23 dias?

Aqui está o trecho 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);

Por favor, assuma que eu configurei ambos session.gc_probabilitye session.gc_divisor 1 apenas para fins desta pergunta.

user5858
fonte
Porque você não quer que um cookie desapareça misteriosamente? Você quer que ele esteja lá para que a sessão possa ser invalidada normalmente? Isso está causando algum problema real para você?
Mołot 31/07
É isso aí então. Mas não seria uma idéia melhor fazer com que o cookie expirasse em, digamos, 40 horas e a sessão do servidor em 51 horas? Quero dizer que a vida útil do cookie é inferior ao tempo de expiração do servidor.
user5858
Isso é amplamente baseado em opiniões e apenas autores de PHP podem realmente dizer. Ah, e isso depende do manipulador de sessões que você decidiu usar. Mas geralmente não, você não quer uma sessão que deveria estar ativa e utilizável por mais X horas sem ninguém para usá-la devido à falta de cookie. É um desperdício de armazenamento. Deixar o cookie por mais tempo significa que quase sempre existe alguém que pode usar os dados da sessão mantidos no servidor, portanto, nenhum dado da sessão é desperdiçado.
Mołot 31/07

Respostas:

16

ini_set ('session.gc_maxlifetime', 200000);

  1. Este valor é para o servidor.
  2. É uma configuração para a coleta de lixo da sessão.
  3. Se a última visita dos usuários ocorreu antes das 200000, esta sessão é elegível para coleta de lixo.
  4. Por ser GC, o valor da sessão pode ser descartado e não obrigatório. Se uma ação do GC ocorrer após a elegibilidade da sessão para o GC, ela será excluída.
ini_set('session.cookie_lifetime', 2000000);
  1. Este valor é para o navegador.

  2. Este é o tempo máximo absoluto até o qual um navegador pode manter esse cookie ativo.

  3. Um valor 0 aqui significa imediato ou quando o navegador está fechado.

Para responder à sua pergunta em particular.

  1. Se o usuário não retornar ao servidor em 2,3 dias, sua sessão será excluída quando a coleta de lixo da sessão for executada.
  2. Se ele continuar acessando uma página no servidor a cada 2,2 (menos de 2,3 dias), sua sessão permanecerá ativa. Mas ele pode estar ativo apenas até 23 dias a partir do momento em que a sessão foi gerada pela primeira vez.
  3. Então, o que isso significa é session.cookie_lifetimeo tempo de vida máximo absoluto de uma sessão.
Gokul NK
fonte
11
Observe o coletor de lixo probabilístico. Mais detalhes: stackoverflow.com/a/1270960 .
digitgopher
Grande resposta, também pode ser feito no php.ini se você tem acesso a esse em seu servidor por exemplo, /etc/php/5.6/fpm/php.iniajustar (ou adicionar) Ambiente: session.gc_maxlifetime = 2000000. Obrigado.
Therobyouknow