O que são cookies e sessões, e como eles se relacionam?

86

Estou tentando entender cookies e sessões profissionalmente. Eu sei que quando um navegador se conecta a um servidor, o servidor "pede" ao navegador para "colar" um cookie com "phpsessid" na pasta de cookies do navegador do cliente.

Agora que temos o "phpsessid", se o cliente entra no servidor, o navegador envia ao servidor o "phpsessid" e o servidor dá uma olhada na pasta tmp e se houver uma correspondência, ele carrega de volta todos os dados que o usuário possui este cliente, mas estou meio confuso com o processo.

Ficarei grato se alguém puder me ajudar a entender esses processos de criação de uma sessão e cookies - o que está acontecendo nos bastidores.

Texto em Branco
fonte
Parece que você já sabe o que está acontecendo. Sobre qual parte específica você gostaria de ser esclarecido? A parte HTTP / cookie ou como o PHP carrega o armazenamento de sessão?
mario
O cookie que o navegador está salvando com o phpsessid, é o phpsessid para identificar o cliente para criar sessões e cookies?
Blanktext
O cookie que o navegador contém contém o id de sessão php, que diz ao servidor "ei, eu conheço este camarada", o servidor então pega os dados da sessão (de / tmp / por exemplo) e restaura o usuário $ _SESSION
somedev
Sim, eu sei disso, mas estou perguntando, este "phpsessid" está usando para identificar o cliente antes de criar sessões e cookies, este phpsessid está incluído nos dados do cookie e no computador cliente e dentro do arquivo de sessão na pasta tmp do servidor ?
Blanktext

Respostas:

171

Vamos examinar isso:

Cookies e sessões são formas de preservar o estado do aplicativo entre as diferentes solicitações feitas pelo navegador. É graças a eles que, por exemplo, você não precisa fazer login toda vez que solicitar uma página no StackOverflow .

Biscoitos

Cookies são pequenos bits de dados, (máximo de 4 KB), que contêm dados em pares chave = valor:

name=value; name2=value2

Eles são definidos por JavaScript ou por meio do servidor usando um cabeçalho HTTP .

Os cookies têm uma data e hora de validade definida, por exemplo, usando cabeçalhos HTTP:

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

O que faria com que o navegador definisse um cookie nomeado name2com um valor devalue2 , que expiraria em cerca de 9 anos.

Os cookies são considerados altamente inseguros porque o usuário pode facilmente manipular seu conteúdo. É por isso que você deve sempre validar os dados do cookie . Não presuma que o que você obtém de um cookie é necessariamente o que você espera.

Os cookies geralmente são usados ​​para preservar o estado de login, onde um nome de usuário e um hash especial são enviados do navegador e o servidor os verifica no banco de dados para aprovar o acesso.

Os cookies também são frequentemente usados ​​na criação de sessões .

Sessões

As sessões são ligeiramente diferentes. Cada usuário recebe um ID de sessão , que é enviado de volta ao servidor para validação por cookie ou por variável GET .

As sessões geralmente têm curta duração, o que as torna ideais para salvar o estado temporário entre aplicativos. As sessões também expiram quando o usuário fecha o navegador.

As sessões são consideradas mais seguras do que os cookies porque as próprias variáveis ​​são mantidas no servidor . Funciona assim:

  1. O servidor abre uma sessão (define um cookie por meio do cabeçalho HTTP)
  2. O servidor define uma variável de sessão.
  3. Página de mudanças do cliente
  4. O cliente envia todos os cookies, junto com o ID da sessão da etapa 1.
  5. O servidor lê o ID da sessão do cookie.
  6. O servidor corresponde ao ID da sessão de uma lista em um banco de dados (ou memória, etc.).
  7. O servidor encontra uma correspondência, lê as variáveis ​​que agora estão disponíveis na $_SESSIONsuperglobal.

Se o PHP não encontrar uma correspondência, ele iniciará uma nova sessão e repetirá os passos de 1-7.

Você pode armazenar informações confidenciais em uma sessão porque elas são mantidas no servidor, mas esteja ciente de que o ID da sessão ainda pode ser roubado se o usuário, digamos, estiver conectado em um WiFi inseguro. (Um invasor pode farejar os cookies e defini-los como seus próprios; ele não verá as variáveis ​​por si só, mas o servidor identificará o invasor como o usuário).


Essa é a essência disso. Você pode aprender mais no manual do PHP em ambos os assuntos.

Fantasma de madara
fonte
1
Isso significa que os cookies precisam ser ativados para que as sessões funcionem?
bigpotato
1
@Edmund: Na maioria dos casos, sim. Você pode, no entanto, configurá-lo para que os IDs de sessão sejam transmitidos via variável GET (o que significaria que o session_id precisaria ser anexado a todas as páginas ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Madara's Ghost
O que significa exatamente fechar o navegador em dispositivos Android ou iPhone? parar o aplicativo? desligar o dispositivo? fechar todas as guias e sair? etc
Vandervals
2
@SurajJain Seria, se não fosse pelos cookies do tipo "lembre-se de mim", que persistiriam por mais tempo.
Madara's Ghost
4
outra pergunta: Quando o usuário fecha o navegador, como o servidor é notificado por esse evento para que o servidor exclua este ID de sessão? ou expira automaticamente depois de algum tempo?
user2774480