Definir o tempo limite da sessão em PHP

Subodh Poudel 30 janeiro 2023
  1. Use as funções session_unset() e session_destroy() para definir o tempo limite de sessão em PHP
  2. Use a função unset() para definir o tempo limite da sessão em PHP
  3. Use a função session_regenerate_id() para alterar o ID da sessão atual em PHP
Definir o tempo limite da sessão em PHP

Este artigo irá apresentar um método para destruir a sessão em PHP usando as funções session_unset() e session_destroy(). Destruiremos a sessão após 30 minutos. Ele verifica o intervalo de tempo desde a última atividade até a hora atual para destruir a sessão.

Também demonstraremos outra maneira de definir o tempo limite da sessão em PHP usando a função unset(). A função unset() leva a variável de sessão como o parâmetro. Este método usa um array para armazenar a variável de sessão.

Apresentaremos outro método para invalidar o id da sessão atual usando a função session_regenerate_id(). Esta função gera um novo id de sessão para a sessão atual destruindo o id de sessão anterior.

Use as funções session_unset() e session_destroy() para definir o tempo limite de sessão em PHP

Podemos usar a função session_unset() para remover a configuração da variável $_SESSION no tempo de execução e usar a função session_destroy() para destruir a sessão do armazenamento. A função time() retorna a hora atual. Podemos usar a variável $_SESSION para armazenar o carimbo de data / hora da última atividade. Assim, podemos verificar a hora calculando as diferenças da última atividade até a hora atual. Desta forma, verificamos o intervalo de tempo de uma sessão.

Por exemplo, inicie a sessão no servidor com a função session_start(). Verifique se a sessão foi criada com a função isset(). Use o operador && para verificar a outra condição dentro da função issset(). Subtraia a variável de sessão start da função time() e verifique o resultado se for maior que 1800. Use session_unset() e session_destroy() dentro da condição if. Em seguida, exiba a mensagem dizendo que a sessão foi destruída. Fora da condição if, crie uma variável de sessão $_SESSION['start'] e atribua a função time() a ela para atualizar a sessão.

A condição if falha porque a variável de sessão ainda não foi criada no exemplo abaixo. A sessão será criada quando a condição falhar. A sessão expira após 30 minutos se o usuário não enviar a solicitação ao servidor. A última parte da função isset() verifica o tempo ativo total da sessão. 1800 denota 1800 segundos, o que equivale a 30 minutos. Se o tempo ativo total exceder 30 minutos, a condição if será verdadeira. Então, ele destrói a sessão. A saída do código corresponde à sessão sendo destruída após mais de 30 minutos do tempo ativo. Verifique o Manual do PHP para aprender mais sobre a função session_unset().

Código de exemplo:

# php 7.*
<?php
session_start();
if (isset($_SESSION['start']) && (time() - $_SESSION['start'] > 1800)) {
    session_unset(); 
    session_destroy(); 
    echo "session destroyed"; 
}
$_SESSION['start'] = time();
?>

Resultado:

session destroyed

Use a função unset() para definir o tempo limite da sessão em PHP

Podemos usar a função unset() para destruir a sessão de uma variável de sessão particular no PHP. A função leva a variável $_SESSION como parâmetro. Este método armazena a sessão em um array. Podemos usar a matriz associativa para armazenar o nome da sessão e a hora de início da sessão. Podemos usar a função time() para obter a hora atual. Podemos verificar o intervalo de tempo da sessão seguindo o método mencionado acima, subtraindo o tempo da sessão ativa do tempo atual.

Por exemplo, use a função session_start() para iniciar a sessão. Escreva uma variável de sessão $_SESSION['start'] e atribua um array associativo a ela. Escreva as chaves 0 e registered e escreva os valores ativo e time() para as respectivas chaves. Verifique se o intervalo de tempo é superior a 30 minutos. Se a condição for verdadeira, escreva a função unset() com $_SESSION['start'] como parâmetro. Em seguida, exiba a mensagem session destroyed. Fora do bloco de condição if, atualize a variável de sessão $_SESSION['start'] com a função time().

No exemplo abaixo, a matriz contém a variável de sessão. O valor da variável de sessão é ativo. A função time() cria o carimbo de data / hora atual no array, e a chave registered mantém o valor. Por favor, verifique o Manual do PHP para aprender mais sobre a variável superglobal $_SESSION.

Código de exemplo:

#php 7.x
<?php
session_start();
$_SESSION['start'] = array(0=> 'active', 'registered' => time())
if ((time() - $_SESSION['start']['registered']) > (60 * 30)) {
    unset($_SESSION['start']);
    echo "session destroyed";
}
$_SESSION['start'] = time();
?>

Resultado:

session destroyed

Use a função session_regenerate_id() para alterar o ID da sessão atual em PHP

Podemos usar a função session_regenerate_id() para alterar o id de sessão da sessão atual. Desta forma, podemos evitar que nosso script fixe a sessão. O valor booleano true na função permite a geração de um novo id de sessão. Neste método, podemos imprimir o id da sessão usando a função session_id() antes e depois da regeneração do id da sessão. Mas a sessão não expira com a mudança do id da sessão. Ele apenas pede ao usuário para efetuar login novamente. Portanto, impede a fixação da sessão.

Por exemplo, inicie a sessão com a função session_id(). Exibe o id da sessão atual usando a função session_id(). Verifique se a sessão foi criada e crie uma sessão $_SESSION['start'] e atribua a função time(). Encontre o intervalo de tempo em que a sessão está ativa, como fizemos no método acima. Se a condição for verdadeira, use a função session_regenerate_id(true). Atualize a variável de sessão. No final do script, imprima o novo id de sessão com a função session_id().

Código de exemplo:

#php 7.x
<?php
session_start();
print("Old: ".session_id());
echo "<br>";
if (!isset($_SESSION['start'])) {
    $_SESSION['start'] = time();
} else if (time() - $_SESSION['start'] > 1800) {
    session_regenerate_id(true); 
    $_SESSION['start'] = time(); 
}
print("Now: ".session_id());
?>

Resultado:

​Old: t38kssej37un38mtsoa6lovh05 
Now: mak7i3in708c6rl2udd8gbfo3r ​ ​
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn