我是使用MEAN技术栈的新手。我读了express-sessiongithub文档,但有些选项对我来说不太清楚。这些选项是saveUninitialized
和resave
。
请问有人可以用示例解释一下使用saveUninitialized
和resave
的优点,如果我们改变这些选项中的布尔值,会产生什么影响。
语法:
app.use(session({
resave: false,
saveUninitialized: true,
}))
我是使用MEAN技术栈的新手。我读了express-sessiongithub文档,但有些选项对我来说不太清楚。这些选项是saveUninitialized
和resave
。
请问有人可以用示例解释一下使用saveUninitialized
和resave
的优点,如果我们改变这些选项中的布尔值,会产生什么影响。
语法:
app.use(session({
resave: false,
saveUninitialized: true,
}))
需要注意的一点是,如果您将 saveUninitialized
设置为 false,则会话cookie在会话未被修改时不会被设置到浏览器中。虽然这种行为可能是暗示的,但当我第一次阅读文档时并不清楚。
req.session.liked = id
,现在我没有再获得新的会话ID了。希望这解决了我的问题。 - jack blankresave
:它基本上意味着对于发送到服务器的每个请求,它都会重置会话cookie。即使请求来自同一用户或浏览器,并且在请求期间未修改会话。
saveUninitialized
:当创建一个空会话对象并且没有设置任何属性时,它处于未初始化状态。因此,将saveUninitialized
设置为false,如果会话未被修改,则不会保存会话。
resave
和saveUninitialized
的默认值均为true,但使用默认值已被弃用。因此,请根据具体情况设置适当的值。
saveUninitialized
设置为false
时,如果你创建的会话对象没有被修改即为空,那么你在浏览器cookie中将看不到connect.sid。这最终会导致你的存储不存储会话对象,因为它没有被修改即未初始化。反之亦然,当saveUninitialized
设置为true
时,情况相反。const express = require('express');
const dotenv = require("dotenv").config();
const app = express();
const session = require("express-session");
app.use(session({
secret:"cat",
resave:false,
saveUninitialized:false,
cookie:{httpOnly:true}
}));
app.get('/login',(req,res)=>{
// req.session.user="sundar";
// req.session.admin=true;
console.log(req.sessionID);
res.send(req.session.user);
})
app.post("/upload",(req,res)=>{
console.log(req.session);
if (req.session.user === "sundar") {
res.send("uploaded" + req.session.user)
}else{
res.send("failed");
}
})
app.listen(process.env.PORT, () => {
console.log(`Listening on http://localhost:${process.env.PORT}`);
});
app.get('/login',(req,res)=>{
req.session.user="sundar";
req.session.admin=true;
/* here we modified session object by adding user and admin properties to object created */
res.send(req.session.user);
})
因此,您可以看到connect.id cookie在浏览器或postman cookies部分被设置。这也意味着,如果您的会话中间件连接了存储,那么您的会话现在将存储在存储中。
resave
设置为true
,则每次请求时都会重置会话cookie。参考:点击此处阅读当saveUninitialized设置为true时,服务器将向浏览器提供会话cookie并将其保存在内存中,即使您没有对会话对象进行任何修改。但是,当后面的字段设置为false时,只有在您修改会话对象时,服务器才会提供会话cookie。如果您已经拥有会话cookie,则无需担心!