2012-06-10 13 views
30

Estoy trabajando en una aplicación de nodo que utiliza Express y SocketIO. Quiero establecer una cookie en mi controlador Express que luego se puede acceder desde mi código Javascript del lado del cliente. Todo lo que intento no parece funcionar:Configurar cookies accesibles desde el lado del cliente en Express

res.setHeader('Set-Cookie','test=value'); 
res.cookie('rememberme', 'yes', { maxAge: 900000 }); 

¿Faltan algo aquí? ¡Gracias por adelantado!

+0

podría ayudar a mostrar el código del lado del cliente. – ebohlman

+0

Estoy yendo al inspector de Chrome y mirando las cookies. Sin embargo, no se ve nada ... – dshipper

Respuesta

48

¡Lo descubrí! Por defecto, Express establece la opción httpOnly en verdadero. Esto significa que sus cookies no pueden ser accedidas por el Javascript del lado del cliente. Con el fin de ajustar correctamente las cookies accesible en el cliente sólo tiene que utilizar un fragmento como el siguiente:

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false}); 

También he notado que si se llama a este comando y luego llamar res.redirect, no conseguirá establecer la cookie . Este comando debe ser seguido por res.render en algún punto para que funcione. No estoy seguro porque es así.

+0

Esa es una buena información. Por casualidad ¿sabes cómo acceder a una cookie del lado del cliente en el lado del servidor en el marco expreso? – user644745

+5

@ user644745 puede leer las cookies en Express mirando el objeto 'res.cookies'. Por ejemplo, una cookie llamada 'session_id' existiría en' res.cookies.session_id'. http://expressjs.com/api.html#req.cookies – frontendbeauty

+1

La razón por la que necesita llamar a res.render o res.send es porque la configuración de la cookie no inicia la respuesta. Enviar y Render hacer. Este método de cookie simplemente agrega una cookie al objeto de respuesta. –

3

En realidad, he tenido el mismo problema durante un par de horas.

Aquí está mi código:

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true }); 

puedo ver la instrucción Set-Cookie en la cabecera de la respuesta, pero en Chrome no puedo encontrar la cookie y no puedo encontrar la cookie por req.cookies [' mycookie '].

La causa principal de este problema es que no usé la conexión HTTPS. (4.x Express con el middleware galleta-parser)

De acuerdo con este documento: Simple Steps to Secure Your Express Node App

Si fijo la opción segura = true, el navegador no enviará mi galleta de ninguna petición HTTP pero HTTPS conexión segura . Luego, después de eliminar la opción segura: verdadera, obtuve mi cookie.

0

por lo que el acceso en http podemos utilizar:

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });? 
Cuestiones relacionadas