Repository navigation
sessoes
Home > Servir site e arquivos > Sessões 🚧
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Vale para a 2.0 · Nível: intermediário
Em uma frase: o TRALWebModule guarda dados por visitante; na 2.0 a sessão pode
ficar na memória, num armazém compartilhado entre servidores ou no próprio cookie.
Você vai precisar: RALModuleWebPackage; para wssStore, um TRALKeyValueStore
(como o TRALFileStore).
SessionStorage |
onde | quando usar |
|---|---|---|
wssMemory (padrão) |
no módulo; perdida ao reiniciar, um processo só | um servidor, precisa de objetos vivos |
wssStore |
em SessionStore
|
vários servidores/processos compartilhando |
wssCookie |
no navegador, assinada e cifrada com SessionSecret (AES-256 + HMAC) |
sem estado no servidor |
Web.SessionStorage := wssStore;
Web.SessionStore := TRALFileStore.Create(Self); // pasta comum aos servidores
// ou, sem estado:
Web.SessionStorage := wssCookie;
Web.SessionSecret := 'segredo-longo-igual-em-todos-os-servidores';procedure TForm1.Entrar(ARequest: TRALRequest; AResponse: TRALResponse);
var
vSessao: TRALWebSession;
begin
// ... confere a senha ...
vSessao := Web.RegenerateSession(ARequest, AResponse); // id novo no login
vSessao.Values['usuario'] := 'ana';
AResponse.Answer(HTTP_OK, '{"ok":true}');
end;
procedure TForm1.Sair(ARequest: TRALRequest; AResponse: TRALResponse);
begin
Web.EndSession(ARequest, AResponse);
end;| propriedade / método | |
|---|---|
SessionTimeout |
ms parada antes de cair (30 min); 0 = nunca |
SessionStore, SessionSecret
|
exigidos por wssStore e wssCookie
|
SessionCookieMaxSize |
maior cookie de sessão em bytes (4000); um valor que passe disso levanta exceção |
OpenSession |
acha ou cria a sessão e envia o cookie |
Session[ARequest] |
só procura; nil se não houver |
RegenerateSession |
novo id mantendo o conteúdo: chame no login, contra fixação de sessão |
EndSession |
apaga a sessão e manda o navegador largar o cookie (logout) |
TRALWebSession.Name |
o id |
Values[nome] |
texto, em qualquer armazenamento |
Objects[nome] |
objeto vivo, só em wssMemory
|
HasValue, DeleteValue, ValueNames, Clear
|
o resto da lista |
Em wssStore e wssCookie a sessão existe só durante um pedido: é lida do armazém
ou do cookie e liberada no fim. Um objeto não sobreviveria a isso (nem poderia ser
gravado), então Objects levanta exceção fora de wssMemory. Guarde texto em
Values (um id, um JSON) e recrie o objeto quando precisar.
| o que acontece | causa | o que fazer |
|---|---|---|
| sessão por cookie não some no logout em outro aparelho | o servidor não guarda nada: uma cópia do cookie vale até SessionTimeout
|
use wssStore se precisa revogar |
exceção ao gravar em Session[ARequest]
|
no modo cookie ela é só leitura | use OpenSession para alterar |
| valor não chega ao navegador | gravado depois do primeiro Send de uma resposta em fluxo |
grave antes do primeiro Send
|
| todos deslogados ao trocar de servidor |
SessionSecret diferente ou vazio |
mesmo segredo em todos; trocar encerra todas as sessões |
| exceção ao iniciar |
wssStore sem SessionStore, wssCookie sem SessionSecret
|
preencha |
| cookie estoura 4 KB | muito dado em Values
|
guarde só ids; ou use wssStore
|
O cookie vai HttpOnly, SameSite=Lax e Secure sob HTTPS.
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
E-mail 🚧
Cliente
Motores
- Qual motor escolher?
- Compatibilidade
- Recursos
- QUIC
- Motor NgHttp2 (HTTP/2) 🚧
- Motor XSocket 🚧
- Motor AdvancedHTTP (experimental) 🚧
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar