Venho compartilhar uma experiência com cookies em http para sessões de usuários.
Primeiramente sabemos que o protocolo HTTP não trabalha com sessões diretamente.
Cada conexão estabelecida serve para troca de informações naquele momento e não fica aberta para dizer que o usuário está conectado.
Para isso são usados os biscoitos na cabeça do documento ou " cookies in header", que nada mais são que um conjunto de definições de cadeia e seu tempo de vida e algumas outras coisas. Essas informações são trocadas entre o servidor e o navegador.
Supondo que quero definir uma sessão para o usuário=Rafael:
Deixe o navegador ganhar um biscoito :
imprima([[ Set-Cookie: usuario=rafael; ]])
O código acima tem que ficar antes de qualquer coisa, porque o que o navegador interpreta quando faz uma requisição primeiro são os cabeçalhos depois vem o código html.
Este biscoito agora ficou no pote do navegador, está guardado.
Quando o navegador fizer uma nova requisição ao servidor ele enviará este biscoito na cabeça também, veja:
imprima(cgi.va.http_cookie()) //--> resultado : usuario=rafael;
no exemplo acima usei as funções do pcgi
Meu objetivo é dar 1 minuto a sessão do usuário rafael, depois disso a raposa come o biscoito.
Neste caso é preciso trabalhar com as funções de tempo e data:
agora=sis.tempo()
daqui1minuto=sis.data("%a, %d %b %Y %H:%M:%S GMT",agora+10860)
// --> o navegador só entende assim: Tue, 27 Jun 2017 16:08:17 GMT --> nós estamos atrasados 3 horas em relação ao tempo médio de Greenwich
// neste exemplo agora+10860 estou somando 3 horas e um minuto, cada hora são 3600 segundos
ID = string.formate("%X", agora ) //converte numero em hexadecimal
imprima("Set-Cookie: usuario=rafael; Expires="..daqui1minuto)
imprima("Set-Cookie: IDdaSessao="..ID.."; Expires="..daqui1minuto)
No exemplo acima mandei dois biscoitos pra raposa (firefox)
que são: usuario=rafael; e IDdaSessao=1DB7DF74;
mandei também o tempo que o biscoito leva pra assar: 60 segundos
Então no próximo pedido que a raposa fizer se o biscoito já tiver assado ela já devorou e não vai devolver na requisição.
Cabe ao servidor fazer essa verificação:
biscoito = cgi.va.http_cookie();
se não biscoito ou biscoito == nulo ou biscoito =='' então
imprima'Não tem biscoito'
senão
imprima(biscoito)
fim
No código acima se faz um teste pra saber se existe ou não o biscoito enviado pelo navegador,
A partir daqui podemos armazenar o que o navegador passar pra saber se a sessão está ativa ou não.
OBSERVAÇÃO: caso não defina o tempo que leva pra assar, a raposa vai comer o biscoito quando for dormir. Isto é, expira automaticamente quando fechar o navegador, mas isso não funciona em todos os navegadores.
Dúvidas ou sugestões estou aí.
Ótimo, muito útil para alguns projetos que quero desenvolver no futuro.