gpt4 book ai didi

node.js - connectJS session - 安全 true 与 false

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:36 27 4
gpt4 key购买 nike

使用 Express/connectJS 并尝试 session 。 ConnectJS documentation提供了一个简单的 View 计数器,这对我有用。

但是,如果我设置 cookie 选项“secure:true”,它就会停止工作,就像这样......

app.use(express.session({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:true}})); 

我看到的是,如果“secure:false”,则仅在请求中发送 sessionID。如果“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

有人可以简要解释一下这里发生了什么,或者给我指出好的解释吗?

============ 跟进 ==============

session 选项“安全”使用 http 或 https 进行切换。

现在,有两种类型的 session 管理: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' }

Cookie session

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?

最佳答案

在 connect/express 中,sessionID 将为 req.sessionID。请参阅文档 here .

connect.sid 将是 cookie 签名,用作解密 Express cookie 的默认 key 。如果您提供key选项,这将用于解密cookie。当安全打开时,它会不断更改 connect.sid。这是 https 中的一个功能,用于阻止 cookie 嗅探/窃取。 connect.sid 由 sessionID 本身加上一些哈希值组成。

更新:

如上所述here ,您可以从 sid 获取 session id(从 s: 到 .)。例如:

sid : 's:b1t73i-MjbyPfQaZHo7_0aGn.RDYYqfFjjAYFry9PmQW/fih+PPMTgNK6uwy5EW372CE'
sessionid : b1t73i-MjbyPfQaZHo7_0aGn

您将看到 sessionid 是 session 存储中 session 的 key 。

此外, session cookiesession不同。在 session 中,您的 cookie 存储用于解密和获取 session 的 sid key 。 cookiesession 表示仅 cookie session ,服务器上不存储任何 session 。 cookie 本身就是 session ,它是用您的 key 加密的。所以不要把它们搞混了。您原来的问题与 session 有关。仅当 session 数据较小且 cookie 使用 key 签名时,cookiesession 才有用。看这个article .

关于node.js - connectJS session - 安全 true 与 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com