Como as sessões PHP funcionam? (não "como eles são usados?")

127

Os arquivos de sessão geralmente são armazenados no /tmp/servidor, por exemplo, e são nomeados sess_{session_id}. Eu estive olhando o conteúdo e não consigo descobrir como eles realmente funcionam.

Buscar o nome da variável e o conteúdo do arquivo é fácil. Mas como o PHP sabe qual sessão pertence a quem?

O session_id parece totalmente aleatório e um endereço IP pode ter vários usuários e cada usuário pode ter várias sessões se houver mais de uma janela do navegador aberta.

Então, como isso funciona?

Christoffer
fonte
Dê uma olhada em stackoverflow.com/questions/523703/…
adatapost

Respostas:

202

Na situação geral:

  • o ID da sessão é enviado ao usuário quando a sessão é criada.
  • é armazenado em um cookie (chamado, por padrão PHPSESSID)
  • esse cookie é enviado pelo navegador ao servidor a cada solicitação
  • o servidor (PHP) usa esse cookie, contendo o session_id, para saber qual arquivo corresponde a esse usuário.

Os dados nos arquivos das sessões são o conteúdo de $_SESSIONserializado (isto é, representado como uma sequência - com uma função como serializar ) ; e não é serializado quando o arquivo é carregado pelo PHP, para preencher a $_SESSIONmatriz.


Às vezes, o ID da sessão não é armazenado em um cookie, mas também é enviado nos URLs - mas isso é bastante raro atualmente.


Para obter mais informações, consulte a seção Tratamento de sessões do manual, que fornece algumas informações úteis.

Por exemplo, há uma página sobre Passing the Session ID , que explica como o ID da sessão é passado de uma página para outra, usando um cookie ou em URLs - e quais opções de configuração afetam isso.

Pascal MARTIN
fonte
5
Como um dispositivo móvel (de um aplicativo nativo) lida com as sessões normalmente? Armazenando um ID de sessão? Ou é aqui que o OAuth aparece?
Adam Waite
13

Como funciona a sessão PHP

  • Primeiro, o PHP cria um número identificador único de 16 bytes (armazenado como uma cadeia de 32 caracteres hexadecimais, por exemplo a86b10aeb5cd56434f8691799b1d9360) para uma sessão individual.

  • O cookie PHPSESSID passa esse número de identificação exclusivo para o navegador dos usuários para salvar esse número.

  • Um novo arquivo é criado no servidor com o mesmo nome do número de identificação exclusivo com o prefixo sess_ (ie sess_a86b10aeb5cd56434f8691799b1d9360.)

  • O navegador envia esse cookie para o servidor com cada solicitação.

  • Se o PHP obtiver esse número de identificação exclusivo do cookie PHPSESSID (em cada solicitação), o PHP pesquisará no diretório temporário e comparará esse número com o nome do arquivo. Se os dois forem iguais, ele recuperará a sessão existente, caso contrário, criará uma nova sessão para esse usuário.

Uma sessão é destruída quando o usuário fecha o navegador ou sai do site. O servidor também encerra a sessão após o período predeterminado de tempo da sessão expirar. Estas são as etapas simples do mecanismo que o PHP está usando para lidar com a sessão. Espero que este artigo ajude você a entender como o PHP SESSION está funcionando.

Veja este artigo para mais detalhes. Como funciona a sessão PHP

Sohel Rana
fonte
Mas se eu estiver, digamos, conectado a um determinado site (também conhecido como: em uma sessão), e abrir uma nova guia mysite.com/cart. Também receberei meu "Olá Joe Doe, 5 mensagens, aqui está a sua lista de carrinho de compras ...", também conhecida como informações da sessão. - Mas por que o navegador referente a essa guia em branco envia qualquer ID de sessão junto com a solicitação GET? rápida atualização: Ah, encontrei a resposta: +)
Frank Nocke
Por exemplo, se o usuário tiver efetuado login e chegar ao seu perfil, por exemplo, se o usuário efetuou login no log e alterou o parâmetro url para acessar um perfil de usuário diferente, como a identificação da sessão pode impedir isso?
Andrewboy 8/04
4

O ID da sessão é realmente aleatório e é passado em um cookie ou na URL, dependendo da configuração. Você já deve ter visto este PHPSESSID = xxxx em alguns URLs, também existe um cookie com esse nome.

Julien Lebosquain
fonte
2

As sessões no PHP são iniciadas usando a função session_start (). Como a função setcookie (), a função session_start () deve vir antes de qualquer HTML, incluindo linhas em branco, na página. Ele terá a seguinte aparência: <?php session_start( );?><html><head> ....... etc A função session_start () gera um ID de sessão aleatório e o armazena em um cookie no computador do usuário (essa é a única informação da sessão que é realmente armazenada no lado do cliente. ) O nome padrão do cookie é PHPSESSID, embora isso possa ser alterado nos arquivos de configuração do PHP no servidor (no entanto, a maioria das empresas de hospedagem o deixará em paz.) Para fazer referência à ID da sessão no seu código PHP, você deve, portanto, referenciar o variável $ PHPSESSID (é um nome de cookie; lembra-se de Cookies?)

Akbor
fonte