Onde as variáveis ​​$ _SESSION são armazenadas?

158

As $_SESSIONvariáveis são armazenadas no cliente ou no servidor?

Steve Gattuso
fonte
no servidor onde você executar o aplicativo php, por caminho específico que você tem que verificar com phpinfo ()
densityx

Respostas:

168

A localização do $_SESSIONarmazenamento variável é determinada pela session.save_pathconfiguração do PHP . Geralmente, isso ocorre /tmpem um sistema Linux / Unix. Use a phpinfo()função para exibir suas configurações específicas, se não tiver 100% de certeza, criando um arquivo com este conteúdo no DocumentRootdomínio:

<?php
    phpinfo();
?>

Aqui está o link para a documentação do PHP nesta configuração:

http://php.net/manual/en/session.configuration.php#ini.session.save-path

rjamestaylor
fonte
129

Como já mencionado, o conteúdo é armazenado no servidor. No entanto, a sessão é identificada por um ID de sessão, que é armazenado no cliente e enviado com cada solicitação. Normalmente, o ID da sessão é armazenado em um cookie, mas também pode ser anexado aos URLs. (Esse é o PHPSESSIDparâmetro de consulta que você vê algumas vezes)

Troelskn
fonte
41
+1 porque você já deu a entender que os cookies não armazenam o conteúdo de $ _SESSION (esses conteúdos são armazenados no servidor, por isso não são vulneráveis à modificação introduzida pelo cliente)
shufler
12
Excelente resposta! Eu estava procurando a pergunta: "Por que as sessões expiram após a exclusão do cache do navegador?". E você salvou meu dia.
Aluno
2
servidor criar arquivo sess_7nu9p0fvidvva6ouaugqcc8292 e no alerta do navegador (getCookie ('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb
2
Plus1 - Para responder à pergunta: "... armazenado no cliente ou no servidor?"
Alex Vargas #
22

Eles geralmente são armazenados no servidor. O local onde eles estão armazenados é de sua responsabilidade como desenvolvedor. Você pode usar a session.save_handlervariável de configuração e session_set_save_handlerpara controlar como as sessões são salvas no servidor. O método de salvamento padrão é salvar sessões em arquivos. Onde eles são salvos é controlado pela session.save_pathvariável.

Rob Kennedy
fonte
18

Uma adição: Note-se que, caso "/ tmp" seja o diretório em que os dados da sessão estão armazenados (o que parece ser o valor padrão), as sessões não persistirão após a reinicialização do servidor da Web, como "/ tmp "é frequentemente eliminado durante a reinicialização. O conceito de persistência do cliente permanece e cai com a persistência do armazenamento no servidor - o que pode falhar se o diretório "/ tmp" for usado para dados da sessão.

Gero
fonte
13

No Debian (não é o caso da maioria das distribuições Linux?), Ele é salvo em / var / lib / php5 /. Como mencionado acima, ele está configurado no seu php.ini.

Hans
fonte
12

Estou usando o Ubuntu e minhas sessões são armazenadas em / var / lib / php5.

Vasyl Teraz
fonte
1
Obrigado, é tudo o que eu queria. Sim, se eles não estavam no lugar de sempre, precisarei abrir os INIs, mas eu só queria saber "Ei, onde as sessões geralmente são armazenadas?" / var / lib / php / sessions / é.
Eric L.
7

Como o Sr. Taylor apontou, isso geralmente é definido no php.ini. Geralmente eles são armazenados como arquivos em um diretório específico.

Brian Fisher
fonte
4

Para o ubuntu 16.10, as sessões são salvas em / var / lib / php / session / ...

Lukáš Kříž
fonte
0

Como funciona? Como ele sabe que sou eu?

A maioria das sessões define uma chave de usuário (chamada de sessionid) no computador do usuário, semelhante à seguinte: 765487cf34ert8dede5a562e4f3a7e12. Em seguida, quando uma sessão é aberta em outra página, ela verifica a chave do usuário no computador e corre para o servidor para obter suas variáveis.

Se você limpar o cache por engano, sua chave de usuário também será limpa. Você não poderá mais obter suas variáveis ​​do servidor, pois não conhece seu ID.

Emeka Obianom
fonte
0

Nas minhas máquinas Ubuntu, as sessões são armazenadas em

/var/lib/php/sessions

e você tem que sudo lsneste diretório somente lsele lançará

ls: não é possível abrir o diretório '.': permissão negada

E no meu servidor Windows Wamp, as sessões php são armazenadas em

C:\wamp64\tmp

e se você instalar php autônomo no Windows, não haverá valor definido por padrão

session.save_path => no value => no value
Ali A. Dhillon
fonte