我使用的应用程序已经具有自己的基础架构。任务是防止用户在多个浏览器中登录。我们的应用程序具有单一应用程序体系结构,因此理想情况下,用户应仅在一个浏览器选项卡中工作。我有一个问题。我无法从客户端删除Cookie。
I。简短地。
应用设置:
服务器:NodeJS 端口:8083
客户:VueJS 端口:8088
我使用模块express-session
在服务器端初始化会话机制,并将cookie发送给客户端。客户尚未设置Cookie。
II。详细信息:
服务器的根文件为 index.js
我在其中执行以下操作:
express
模块:const express = require('express')
cors
模块:const cors = require('cors')
cors
设置:app.use(cors({
origin: 'http://localhost:8088',
credentials: true
}))
然后我在 user.js 文件中初始化会话并接收客户端的连接:
express-session
模块:const session = require('express-session')
express.Router()
插入路由:const router = express.Router()
const EIGHT_HOURS = 1000 * 60 * 60 * 8
const {
SESS_NAME = 'sid',
SESS_LIFETIME = EIGHT_HOURS,
SESS_SECRET = 'test',
NODE_ENV = 'development'
} = process.env
const IN_PROD = NODE_ENV === 'production'
router.use(session({
name: SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESS_SECRET,
cookie: {
maxAge: SESS_LIFETIME,
sameSite: false,
// Must have HTTPS to work 'secret:true'
secure: IN_PROD
}
}))
router.post()
接收客户端查询那我做了什么:
req.session.destroy
删除会话数据,并希望从某些浏览器中注销浏览器用户并清除cookie。req.session.destroy(err => {
if (err) {
return res.send({ error: 'Logout error' })
}
res.clearCookie(SESS_NAME, {path: '/'})
return res.send({ 'clearSession': 'success' })
})
不幸的是,没有魔术发生
我阅读了不同的主题。例如,此处(GitHub)提供了以下结论:如上所示,在res.clearCookie
方法中使用显式cookie的路径指示。
那没用。
在Cookie设置中写入此设置{path: '/'}
。也没用。
router.use(session({
name: SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESS_SECRET,
cookie: {
path: '/',
maxAge: SESS_LIFETIME,
sameSite: false,
// Must have HTTPS to work 'secret:true'
secure: IN_PROD
}
}))
正如快递会议文档(NPM:express-session中所写)那样,此路径是cookie存储的默认路径。
req.session = null
:req.session.destroy(err => {
if (err) {
return res.send({ error: 'Logout error' })
}
req.session = null
res.clearCookie(SESS_NAME, {path: '/'})
return res.send({ 'clearSession': 'success' })
})
那没用
delete req.session
也不起作用。那么,如何解决此问题?我该怎么办?
答案 0 :(得分:2)
添加 .send('cleared cookie')
使我的浏览器清除了命名 cookie 的缓存。
const logOutRequest = (req, res) => {
req.session.destroy((err) => {
res.clearCookie("notcookie").send('cleared cookie');
});
};
答案 1 :(得分:0)
您是否尝试过通过将确切的cookie设置为null来删除确切的cookie,也就是说,您正在处理名为Views的cookie,则可以使用req.session.Views = null
删除该cookie
代替此操作
req.session.destroy(err => {
if (err) {
return res.send({ error: 'Logout error' })
}
req.session = null
res.clearCookie(SESS_NAME, {path: '/'})
return res.send({ 'clearSession': 'success' })
})
您可以输入会话cookie的名称,并将其设置为null
req.session.sid= null
答案 2 :(得分:0)
这将从客户端浏览器中删除cookie
req.session.destroy(err => {
res.clearCookie("session-cookie-name", { path: "/" });
});