socket.io 中的 socket.request.session 无法获取连接成功之后设置的 session
发布于 5 年前 作者 hellomrbigshot 2538 次浏览 来自 问答

socket.io 先合界面连接成功了,然后登录网站,把用户信息放进 session,但是 socket.request.session 中还是原来的值,并没有后面添加的用户信息。这个如何解决。 nodejs 代码如下

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)
  })
})

是否必须要登录之后再连接才能获取呢。

回到顶部