Node.js 中 socket.io 中无法获取新增的 session
在 express
中使用了 express-session
设置 session
。
问题
登录之后我会在session
中新增一个 user
变量,但是在socket.request.session
中并没有这个变量。
代码
const io = require('socket.io').listen('8082', { origins: '*' })
const schedule = require('node-schedule')
io.set('transports', [
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling',
'polling'
])
io.set('origins', '*:*')
const app = new express()
const sessionStore = new session.MemoryStore({ reapInterval: 3600 * 1000 })
const sessionMiddleware = session({
secret: 'Stefanie Sun',
store: sessionStore,
resave: false, // 强制更新 session
saveUninitialized: true, //
cookie: {
maxAge: 8 * 3600 * 1000, // 过期时 8 小时
secure: false // http 访问时 secure 为 false
},
rolling: true
})
io.use((socket, next) => {
sessionMiddleware(socket.request, socket.request.res, next);
})
app.use(sessionMiddleware)
routes(app)
io.on('connection', (socket) => {
const comment_schedule = schedule.scheduleJob('*/10 * * * * *', async () => { /** 10s查询一次是否有新的内容 **/
const COOKIE_STR = socket.request.session
console.log(COOKIE_STR)
})
})
登录之后打印出router
中的req.session
和socket.request.session
req.session
socket.request.session
10s 就会执行一次
发现 socket.request.session 并没有登录之后添加的user字段。
想问问这是为啥?
socket.io
在登录之前已经连接了,登录之后会往 node
的 session
中写入一个 user
属性记录用户信息,就是这个新增的属性无法在 socket.request.session
中获取到。是不是只有先登录,写入session,然后再连接 socket.io
这样才可以。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请问解决了吗,我也遇到了类似的问题
主要看socket.io第一次握手(101)时带的header。所以,如果要等http去标记session,那就等拿到session之后,再让socket.io带着session去握手