node.js - express-session - 会话 id 和 connect.sid 之间的区别?
问题描述
session id
和 和有什么区别connect.sid
?
例如:
console.log('session id =', req.sessionID)
结果:
session id = CCw2pSpdPf8NRKLQpFH-nlFztEzps24Q
和:
console.log('req.headers =', req.headers)
结果:
req.headers = { 20:51:34
host: 'localhost:3000',
connection: 'keep-alive',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' +
'(KHTML, like Gecko) Chrome/73.0.3683.75 ' +
'Safari/537.36',
dnt: '1',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8',
cookie: 'connect.sid=s%3ACCw2pSpdPf8NRKLQpFH-nlFztEzps24Q.P04Tx%2FNboFGXvR34HOjpbeh4ogWy58zs%2Bpyde%2FkuUVs',
'if-none-match': 'W/"2f-u+/xADzzu5HL7bySP/YXVKZBlPc"'
}
CCw2pSpdPf8NRKLQpFH-nlFztEzps24Q
不同于connect.sid
如何在中间件中使用它们来验证用户?
解决方案
一个会话标识一个特定的客户端。一般的想法是会话对象和您放入会话对象的任何数据都保留在服务器上。当用户向您的服务器发出请求时,他们会显示您的会话基础结构查找的会话 cookie 并获取适当的会话对象。然后,您的请求处理程序可以使用该会话对象和您放入其中的数据来满足您的任何需求。
会话对象中的数据本地存储在您的服务器上,因此它是安全的,不会被客户端弄乱。
如何在中间件中使用它们来验证用户?
对于身份验证,通常会在会话对象中创建某种状态,以表示用户是否已通过正确的身份验证。如果没有,您要求他们提供凭据。如果是这样,您允许请求继续进行。
这是中间件的一些伪代码。
app.get("/login", (req, res) => {
// handle login page
res.sendFile("login.html");
});
app.post("/login", (req, res) => {
// check auth credentials from the login form
if (credentials good) {
req.session.authenticated = true;
res.redirect("/someOtherPage.html");
} else {
req.session.authenticated = false;
res.redirect("/login.html");
}
});
// middleware to allow access of already authenticated
app.use((req, res, next) => {
// check if session already authenticated
if (req.session.authenticated) {
next();
} else {
res.redirect("/login.html");
}
});
// route that relies on previous middleware to prove authentication
app.get("/somethingElse", (req, res) => {
// do something for this authenticated route
});
session id 和connect.sid 有什么区别?
cookie 具有名称和值。默认情况下,快速会话的 cookie 名称是connect.sid
. cookie 的值是 express-session 用作会话存储的索引的加密密钥。
会话 ID 是每个会话对象的内部唯一 ID。它用于会话存储的内部实现。你真的不需要担心这些是什么。它们在内部用于各种内务管理目的。
Soconnect.sid
包含发送给客户端以及客户端返回给服务器的 cookie 值。它故意被加密掩盖并且难以伪造或猜测,因此客户端无法猜测会话值。会话 ID 仅在服务器上使用,并且确实需要这些类型的保护。
推荐阅读
- generics - 访问通用结构中的字段
- python - 提取具有 nan 值的数据框
- c - C 程序编译但不会在 main 方法中打印出测试用例
- vb.net - 如果第一个“If”为真,如何避免遵循“If”条件
- python - Tensorflow:序列在编码和解码 TFRecord 时是否重要
- javascript - 在数据属性对象上使用 get 和 set - VueJS
- python - GPU 在运行 Keras/tensorflow-gpu 时崩溃,特别是当时钟速度在 0 MHz 时空闲
- ef-code-first - EF Core 正在从抽象类创建表
- r - 查找产生相关值的单个缺失值
- amazon-web-services - 如何找出给定 AWS 访问密钥 ID 的用户?