Visão geral
Express.js usa um cookie para armazenar uma id de sessão (com uma assinatura de criptografia) no navegador do usuário e, em seguida, em solicitações subsequentes, usa o valor desse cookie para recuperar informações de sessão armazenadas no servidor. Este armazenamento do lado do servidor pode ser um armazenamento de memória (padrão) ou qualquer outro armazenamento que implemente os métodos necessários (como conectar-redis ).
Detalhes
Express.js / Connect cria uma string Base64 de 24 caracteres usando utils.uid(24)
e a armazena em req.sessionID
. Essa string é então usada como o valor em um cookie.
Lado do Cliente
Cookies assinados são sempre usados para sessões, portanto, o valor do cookie terá o seguinte formato.
[sid].[signature]
Onde [sid] é o ID da sessão e [assinatura] é gerada assinando [sid] usando a chave secreta fornecida ao inicializar o middleware da sessão. A etapa de assinatura é feita para evitar adulteração. Deve ser computacionalmente inviável modificar [sid] e então recriar [assinatura] sem o conhecimento da chave secreta usada. O cookie de sessão ainda é vulnerável a roubo e reutilização, se nenhuma modificação de [sid] for necessária.
O nome deste cookie é
connect.sid
Lado do servidor
Se um manipulador ocorrer após o middleware cookieParser
e, session
ele terá acesso à variável req.cookies
. Ele contém um objeto JSON cujas chaves são as chaves do cookie e os valores são os valores do cookie. Isso conterá uma chave nomeada connect.sid
e seu valor será o identificador de sessão assinado.
Aqui está um exemplo de como configurar uma rota que verificará a existência do cookie de sessão em cada solicitação e imprimirá seu valor no console.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Você também precisará certificar-se de que o roteador ( app.use(app.router)
) está incluído após cookieParser
e session
na seção de configuração.
A seguir está um exemplo dos dados armazenados internamente por Express.js / Connect.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
O user
campo é personalizado. Todo o resto faz parte do gerenciamento de sessão.
O exemplo é do Express 2.5.