foo*_*bar 95 javascript cookies session node.js express
使用Express.js,会话很简单.我很好奇他们实际上是如何工作的.
它是否在客户端存储了一些cookie?如果是这样,我在哪里可以找到该cookie?如果需要,我该如何解码?
我基本上希望能够看到用户是否已登录,即使当时用户实际上并不在该网站上(例如,当您在其他网站上时,facebook知道您已登录).但我想要明白,我应该先了解会议是如何运作的.
Way*_*inn 157
Express.js使用cookie在用户的浏览器中存储会话ID(带有加密签名),然后在后续请求中使用该cookie的值来检索存储在服务器上的会话信息.此服务器端存储可以是内存存储(默认)或实现所需方法的任何其他存储(如connect-redis).
Express.js/Connect 使用并存储它来创建一个24个字符的Base64字符串.然后将此字符串用作cookie中的值.utils.uid(24)req.sessionID
签名cookie始终用于会话,因此cookie值将具有以下格式.
[sid].[signature]
Run Code Online (Sandbox Code Playgroud)
其中[SID]是的SessionID和[签名]通过使用初始化会话中间件时提供的密钥签署[SID]产生.签名步骤是为了防止篡改.在不知道所使用的密钥的情况下修改[sid]然后重新创建[签名]在计算上是不可行的.如果不需要修改[sid],会话cookie仍然容易被盗和重用.
这个cookie的名称是
connect.sid
Run Code Online (Sandbox Code Playgroud)
如果在中间件cookieParser和session中间件之后发生处理程序,它将有权访问该变量req.cookies.它包含一个JSON对象,其键是cookie键,值是cookie值.这将包含一个名为key的键connect.sid,其值将是已签名的会话标识符.
这是一个如何设置路由的示例,该路由将检查每个请求上是否存在会话cookie,并将其值打印到控制台.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Run Code Online (Sandbox Code Playgroud)
您还需要确保路由器(app.use(app.router))包含在配置部分之后cookieParser和之后session.
以下是Express.js/Connect内部存储的数据示例.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
Run Code Online (Sandbox Code Playgroud)
该user字段是自定义的.其他一切都是会话管理的一部分.
示例来自Express 2.5.
dav*_*vin 41
我从来没有使用过Express.js,虽然根据他们关于这个主题的文档听起来像:
Cookie存储在客户端上,带有密钥(服务器将用于检索会话数据)和散列(服务器将使用该散列来确保cookie数据未被篡改,因此如果您尝试更改cookie的值无效)
与某些框架(例如Play Framework!)相对的会话数据保存在服务器上,因此cookie更像是会话的占位符而不是实际会话数据的持有者.
从这里开始,服务器上的会话数据默认保存在内存中,尽管可以将其更改为实现适当API的任何存储形式.
因此,如果您想要检查没有特定req请求对象的内容,就像您说的那样,您只需访问相同的存储空间即可.在第一个文档页面的底部,它详细说明了存储需要实现的必需方法,因此,如果您熟悉存储API,也许您可以执行.getAll()类似存在的操作,并循环访问会话数据并阅读任何内容你想要的价值观.
我很好奇他们实际上是如何工作的.
它是否在客户端存储了一些cookie?
是的,它通常是一个带有指定会话ID的cookie,应该用秘密签名以防止伪造.
如果是这样,我在哪里可以找到该cookie?如果需要,我该如何解码?
你不应该在客户端混淆会话cookie.如果你想在服务器端使用会话,你应该检查相关的express.js和连接文档.
| 归档时间: |
|
| 查看次数: |
51213 次 |
| 最近记录: |