账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    express-session sessionid不能维持,固定sessionid情况下设置成功取值失败
    41
    0

    express应用,加载了express-session中间件,不管使用redis还是file还是默认的内存session,都无法保持session回话,刷新网页后的sessionid都会发生变化,通过genid回调设定sessionid固定后依然没法获取上个请求设置的session参数值

    app.set('trust proxy', 1) // trust first proxy
            // app.use(cookieParser())
            app.use(session({
                name:global.APP_NAME||"n2hws",
                rolling:true,
                secret: 'keyboard cat',  // 用来对session id相关的cookie进行签名
                store: session_store,  // 本地存储session(文本文件,也可以选择其他store,比如redis的)
                saveUninitialized: true,  // 是否自动保存未初始化的会话,建议false
                resave: false,  // 是否每次都重新保存会话,建议false
                cookie: {
                    // maxAge: 10 * 1000,  // 有效期,单位是毫秒
                    secure: true,
                    path:'/'
                },
                // genid: function(req) {
                //     return 1 // use UUIDs for session IDs
                // },
            }))
            app.listen(port,host)

    求大神解答问题所在,已经卡住三天了,查了很多资料,没有相关描述。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 三年如梦 普通会员 1楼

      这个问题可能是由于服务器端的session管理机制导致的。在express session中,sessionid通常由服务器端生成并随机分配给每个会话。如果服务器端的sessionid管理机制出现问题,可能会导致sessionid的维持问题。

      以下是一些可能的解决方案:

      1. 服务器端优化:服务器端可以使用一些技术来优化sessionid的生成和分配。例如,可以使用哈希算法来生成sessionid,这样即使服务器端的sessionid管理机制出现问题,sessionid也不会被破坏。

      2. 使用cookie:如果你希望在客户端使用session,那么可以考虑使用cookie来存储sessionid。这样,即使服务器端的sessionid管理机制出现问题,客户端仍然可以通过cookie来获取到sessionid。

      3. 使用sessionstore:如果你的服务器端需要持久化session,那么可以考虑使用sessionstore来存储sessionid。这样,即使服务器端的sessionid管理机制出现问题,sessionid仍然可以被持久化。

      4. 使用sessioncookie:如果你希望在客户端使用session,但是服务器端需要存储sessionid,那么可以考虑使用sessioncookie。这样,即使服务器端的sessionid管理机制出现问题,客户端仍然可以通过sessioncookie来获取到sessionid。

      总的来说,解决这个问题需要根据你的具体需求来选择合适的方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部