使用Express / connectJS并玩弄会话。 ConnectJS documentation提供了一个简单的视图计数器,这对我有用。
但是,如果我设置cookie选项'secure:true'就会停止工作,就像这样......
app.use(express.session({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:true}}));
我看到的是sessionID仅在'secure:false'的请求中发送。如果'secure:true',我会在每次请求时获得一个新的sessID。
这失败了。
Req header - SECURE:TRUE
Cookie connect.sid=s%3AP2q10tK255KdVcizJMwETG69.IU2idEzOVaCxahdcRoEGhTkUBK%2B1Evxc0boj97nJgHg;
connect.sess=s%3Aj%3A%7B%7D.opP3ZU2IoVMmmqws%2F5vFGB4s8FNXJ8R6RNZoF4KRNfU
这很有效。
Req header - SECURE:FALSE
Cookie connect.sid=s%3AP2q10tK255KdVcizJMwETG69.IU2idEzOVaCxahdcRoEGhTkUBK%2B1Evxc0boj97nJgHg;
connect.sess=s%3Aj%3A%7B%7D.opP3ZU2IoVMmmqws%2F5vFGB4s8FNXJ8R6RNZoF4KRNfU;
NodeJS=s%3ArBKqb-Wptr_IJMYW6VzJVu__.2Yc3GL32L%2BHuY4L5RxepdiEirtvbSlIeErWVIHXm4uc
有人可以简单地解释一下这里发生了什么,或者给我一个很好的解释吗?
============= 关注 ==============
会话选项'secure'使用http或https切换。
现在,有两种类型的会话管理:session和cookieSession。以下是每个输出:
SESSION
app.use(express.cookieParser());
app.use(express.session({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:false}}));
=== req.sessionID ===
b1t73i-MjbyPfQaZHo7_0aGn
==== req.sessionStore ===
{ sessions: { 'b1t73i-MjbyPfQaZHo7_0aGn': '{"cookie":{"originalMaxAge":3600000,"expires":"2013-08-12T19:13:37.169Z","secure":false,"httpOnly":true,"path":"/"},"views":1}' } generate: [Function], _events: { disconnect: [Function], connect: [Function] } }
=== req.session ===
{ cookie: { path: '/', _expires: Mon Aug 12 2013 12:13:37 GMT-0700 (PDT), originalMaxAge: 3600000, httpOnly: true, secure: false }, views: 1 }
==== req.cookies ===
{ NodeJS: 's:b1t73i-MjbyPfQaZHo7_0aGn.RDYYqfFjjAYFry9PmQW/fih+PPMTgNK6uwy5EW372CE', woot: 'woot' }
=== req.signedCookies ===
{ swoot: 'swoot' }
COOKIESESSION
app.use(express.cookieParser());
app.use(express.cookieSession({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:false}}));
=== req.sessionID ===
undefined
==== req.sessionStore ===
undefined
=== req.session ===
{ views: 1, cookie: { path: '/', _expires: Mon Aug 12 2013 12:20:16 GMT-0700 (PDT), originalMaxAge: 3600000, httpOnly: true, secure: false } }
==== req.cookies ===
{ NodeJS: 's:j:{"views":1}.JtWQMoqzLEZBoGSxbxXfyqFJ2KIYyJG9GDSY4rxdVLQ', woot: 'woot' }
=== req.signedCookies ===
{ swoot: 'swoot' }
SESSION返回我可以使用的对象,但是我该如何处理SESSIONCOOKIE?
答案 0 :(得分:1)
您的网址是什么?是http://还是https://?对于会话使用cookie,如果cookie是“安全的”,那么它们将不会被发送到服务器,除非它是https。然后,服务器永远不会看到cookie,无法将连接关联到会话,从而创建新会话。
答案 1 :(得分:1)
在connect / express中,sessionID为req.sessionID
。请参阅文档here。
connect.sid
将是cookie签名,用作解密快速cookie的默认密钥。如果您提供key
选项,则会将其用于解密Cookie。启用安全功能后,它会继续更改connect.sid
。这是https中的一项功能,可以阻止cookie嗅探/窃取。 connect.sid
由sessionID本身和一些哈希组成。
如上所述here,您可以从sid获取会话ID(从s:到。)。例如:
sid : 's:b1t73i-MjbyPfQaZHo7_0aGn.RDYYqfFjjAYFry9PmQW/fih+PPMTgNK6uwy5EW372CE'
sessionid : b1t73i-MjbyPfQaZHo7_0aGn
您将看到sessionid是会话库中会话的密钥。
会话与 cookiesession 不同。在会话中,您的cookie存储用于解密和获取会话的sid密钥。 cookiesession表示仅限cookie会话,服务器上没有存储会话。 cookie本身就是会话,使用您的密钥加密。所以不要混淆它们。您的原始问题与会话有关。 cookiesession仅在会话数据较小且cookie使用密钥签名时才有用。请参阅此article。