2011-03-10 12 views
7

Estoy usando un servidor Node.js y estoy desarrollando con el marco Connect. Estoy intentando regenerar los SID después de un intervalo determinado para evitar la fijación de la sesión. Hay un método llamado req.session.regenerate que, de acuerdo con los documentos, debería hacer justamente eso.Regenerar identificadores de sesión con Nodejs Connect

«Para regenerar la sesión simplemente invocar el método, una vez que complete una nueva instancia SID y la reunión se inicializa en req.session»

código Ejemplo:

req.session.regenerate(function(err){ 
    // will have a new session here 
}); 

Después de llamar al método anterior, compruebo el valor de req.sessionID, solo para encontrar que el valor es el mismo que antes mi.

Si trato de obtener el ID de sesión desde req.session.regenerate y lo escribo en el terminal obtengo un nuevo SID, lo cual es aún más sorprendente ~ IE ¿por qué querría que el SID se generara solo dentro del alcance del ¿llamar de vuelta? Si asigno el valor a una variable global, su valor no está definido.

Tengo la sensación de que es algo realmente obvio que estoy pasando por alto.

Cualquier ayuda es apreciada.

+1

¿Dónde y cuándo está marcando 'req.sessionID'? Tal vez el código con el que estás comprobando está comprobando antes de que se ejecute la función de regeneración. –

+0

He estado visitando algunos lugares. Antes, desde dentro y después de regenerar para comparar los valores. Yo uso console.log para enviar el valor de req.session.id al terminal. Y no hay diferencia en ellos. –

+0

arregló esto? Tengo otro problema ligeramente diferente: http://stackoverflow.com/questions/5646905/why-do-i-have-to-create-a-local-reference-to-a-quest-session-object-in -nodejs – Lewis

Respuesta

1

Simplemente envíe la respuesta de regreso en la devolución de llamada de la función regenerar. Como la regeneración de la sesión es asíncrona, cuando regrese al cliente seguirá teniendo la sesión anterior.

req.session.regenerate(function(err) { 
           req.session.myid = "myvalue"; 
           res.simpleJSON(200, status); 
         }); 
Cuestiones relacionadas