我很难理解express-session
包中生成的Cookie的作用。
所以在下面的代码中:
var session = require('express-session')
var store = require('session-file-store')(session)
app.use(session({
name: 'session-id',
secret: 'sdafjlkdashf34khrjke'
saveUninitialized: true,
resave: true,
store: new Store()
})
func auth (req, res, next) {
if (!req.session.user) {
req.session.user = 'admin'
next()
}else {
console.log(req.session)
}
}
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
所以基本上在上面的简单代码片段中,每当用户向服务器发出请求时(例如:localhost:3000/
),就会发生3件事情:
session
文件夹中。现在让我们说50个cookie对象存储在session
个文件夹中,因为50个客户端向我的服务器发出了请求。
所以我的问题是,每当这50个用户中的一个向我的服务器发出另一个请求时,express-session
如何知道选择哪个cookie对象(来自session
文件夹)并附加到{{ 1}}在代码中使用的对象。
答案 0 :(得分:1)
会话对象是一个常规JavaScript对象,您可以在其中存储(合理地)特定会话的通用信息。
会话由唯一标识符,会话密钥或会话ID标识。 此是存储在Cookie中的内容,用于将客户端与会话文件相关联。
以下是为我设置的示例Cookie:
set-cookie: session-id=s%3AvdD2a8WqJD3R5L5UjZ_oWDkWMVbEa8UF.%2BXjKW6hIaX%2FfDAJm2lSZrEJ0xFigoeHjru1rZT7Na0E
它由四部分组成(为了清楚起见,我对其进行了解码):
s:
:由express-session
设置的前缀,表示会话Cookie已签名; vdD2a8WqJD3R5L5UjZ_oWDkWMVbEa8UF
:唯一标识符。如果查看存储会话的目录,您将找到该名称的JSON文件; .
:会话ID和签名之间的分隔符; +XjKW6hIaX%2FfDAJm2lSZrEJ0xFigoeHjru1rZT7Na0E
:Cookie签名(以防止篡改); 因此,Cookie本身并不包含任何会话信息,这些信息都存储在文件中。
以下是会话文件的示例:
{
"cookie": {
"originalMaxAge": null,
"expires": null,
"httpOnly": true,
"path": "/"
},
"value": 1472628829554, // this is a value I stored in the session
"__lastAccess": 1472628829557
}
就Cookie而言,域名指的是Cookie所属的域(或网站)。如果example.com
设置了Cookie,则Cookie会绑定到该域,并且只会发送到该网站。但是,这与识别发送cookie的客户端没有任何关系,这是会话ID的工作。