Visión general
Express.js usa una cookie para almacenar una identificación de sesión (con una firma de cifrado) en el navegador del usuario y luego, en solicitudes posteriores, usa el valor de esa cookie para recuperar la información de la sesión almacenada en el servidor. Este almacenamiento del lado del servidor puede ser un almacén de memoria (predeterminado) o cualquier otro almacén que implemente los métodos requeridos (como connect-redis ).
Detalles
Express.js / Connect crea una cadena Base64 de 24 caracteres utils.uid(24)
y la almacena en req.sessionID
. Esta cadena se usa luego como valor en una cookie.
Lado del cliente
Las cookies firmadas siempre se utilizan para las sesiones, por lo que el valor de la cookie tendrá el siguiente formato.
[sid].[signature]
Donde [sid] es el ID de sesión y [firma] se genera firmando [sid] utilizando la clave secreta proporcionada al inicializar el middleware de sesión. El paso de firma se realiza para evitar manipulaciones. Debería ser computacionalmente inviable modificar [sid] y luego volver a crear [firma] sin conocimiento de la clave secreta utilizada. La cookie de sesión sigue siendo vulnerable al robo y la reutilización, si no se requiere modificación de [sid].
El nombre de esta cookie es
connect.sid
Lado del servidor
Si aparece un controlador después del middleware cookieParser
y session
, tendrá acceso a la variable req.cookies
. Contiene un objeto JSON cuyas claves son las claves de la cookie y los valores son los valores de la cookie. Este contendrá una clave nombrada connect.sid
y su valor será el identificador de sesión firmado.
A continuación, se muestra un ejemplo de cómo configurar una ruta que verificará la existencia de la cookie de sesión en cada solicitud e imprimirá su valor en la consola.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
También deberá asegurarse de que el enrutador ( app.use(app.router)
) esté incluido después cookieParser
y session
en su sección de configuración.
El siguiente es un ejemplo de los datos almacenados 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"
}
}
El user
campo es personalizado. Todo lo demás es parte de la gestión de sesiones.
El ejemplo es de Express 2.5.