O que acontece com a matriz $ _SESSION Se os tempos de uma sessão PHP no meio de uma solicitação?

StackOverflow https://stackoverflow.com/questions/1002935

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu sempre me perguntei, se uma sessão PHP vezes durante a meio da execução de um script, se o conteúdo do array $ _SESSION ainda estar disponível até fins de execução de script? Por exemplo:

session_start();

if(! isset($_SESSION['name'])) {
    echo 'Name is not set';
    exit;
}

// imagine there is a bunch of code here and that the session times out while
// this code is being executed

echo 'Name is ', $_SESSION['name']; // will this line throw an error?

É prático para copiar variáveis ??de sessão para o âmbito local para que eu possa lê-los mais tarde no script sem ter que manter a verificação de um tempo de sessão fora? Algo como:

session_start();

if(isset($_SESSION['name'])) {
    $name = $_SESSION['name'];
} else {
    echo 'Name is not set';
    exit;
}

// bunch of code here

echo 'Name is ', $name;
Foi útil?

Solução

não se preocupe com essas coisas. Nada vai acontecer com a sessão. É inicializado por sessioni_start() e $_SESSION estará sempre disponível dentro do seu script.

Outras dicas

O padrão de três horas sessão vida é redefinir cada vez que você abrir a sessão (ver session_cache_expire ), então a única maneira de uma sessão pode expirar no meio de um pedido é se um pedido leva três horas para processo. Por padrão PHP pede tempo fora após apenas 30 segundos, por isso não há perigo de expiração da sessão durante uma solicitação. Além disso, a variável $_SESSION não vai mudar de repente no meio de uma solicitação. É preenchida quando do início da sessão, e é isso.

As variáveis ??são copiados para o $ _SESSION global ao pedido inicial, por isso tem o mesmo efeito que copiá-lo para uma variável local.

No entanto, por causa clareza, faz sentido para copiá-lo para uma variável local. Especialmente se você planeja usar as variáveis ??várias vezes. Pode ser difícil de ler o código que tem US $ _SESSION [ 'variável'] em todo o lugar.

O que você precisava para entender é como sessões de trabalho. Um cliente que acessa um script usando um $ _SESSION Super global só sabe a chave para a sessão que lhes pertence (armazenado em cookies / URL). Isso significa que os dados da sessão em si não tem nada a ver com o cliente. Se você tem a chave para os dados da sessão que você deseja usar, então você pode usá-lo. Versões mais antigas do PHP tinha algumas falhas de segurança porque as sessões onde armazenados em algum lugar que era facilmente acessível (não me lembro de detalhes).

Basicamente, se você tem o ID da sessão em um script PHP que você tem acesso a essa sessão, a menos que a memória na máquina é lavada / disco rígido está corrompido (ie Computer Restart / Device Failure).

Espero que isso ajude, caso contrário, ir para php.net e mergulhar os detalhes sobre como as sessões de trabalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top