Diferença entre sessões PHP e cookies

Por muito tempo, não estava claro para mim a diferença entre uma sessão e um cookie. Em grande parte, porque eles pareciam tão interligados e usados ​​para propósitos semelhantes.

Recentemente, tenho trabalhado em um projeto de cliente em que estamos introduzindo o logon único baseado em SAML, mas nossa base de código não é o que define o cookie que precisa ser destruído no logout. O cookie é criado pelo provedor de identidade, portanto, é difícil excluí-lo. O domínio no qual nossa base de código reside tem o mesmo domínio raiz que o domínio do provedor de identidade (portanto, não foi um problema de domínio cruzado), mas acabei tendo que definir explicitamente não apenas o caminho, mas também o domínio do cookie ao excluir o bolacha.

Em última análise, a diferença resumida entre sessões e cookies é a seguinte (obrigado a Gizmola da PHP Freaks pelo detalhe):

Cookie : Um par chave / valor que é armazenado pelo navegador do usuário e está disponível no array superglobal $ _COOKIE disponível em PHP. A solicitação de cookie é iniciada com uma data de expiração definida explicitamente . Por exemplo:

setcookie('cookieName', $some_value, time()+3600, "/", ".example.com")

Na próxima solicitação do servidor, $ _COOKIE [‘cookieName’] estará disponível. Se você usar uma ferramenta de navegador para examinar o cookie, ele terá uma data de validade.

Cookie de sessão : Idêntico ao anterior, mas definido sem data de validade. Se você usar a mesma ferramenta do navegador, ele dirá que o cookie expira no final da sessão; que é quando você fecha o navegador. Por exemplo:

setcookie('cookieName', $some_value);  

Sessão PHP : um mecanismo do lado do servidor que irá associar um monte de dados a um id de sessão. Cada vez que uma sessão é chamada, ela a serializa / desserializa. Isso pode ser mais dados do que apenas um único par de chave / valor suportado por um cookie, mas a maneira de associar esses dados a um usuário é criando um cookie (regular ou sessão, conforme descrito acima) em seu navegador que contém o ID da sessão. Dessa forma, os dados corretos podem ser recuperados para um determinado usuário com base no valor desse cookie.