express老是丢session是怎么回事啊
发布于 2年前 作者 jtyjty99999 1397 次浏览

就是我nodejs应用中,老是莫名其妙的session就没了(express)

比如req.session.userid 初始化为123456

过阵子req.session.userid变成了undefined…

但是我没权限读写公共redis。后来我跟后端商量了下让他写了个读写session的口子暴露给我。(get set del)

这个丢session是怎么造成的啊? 对于这个问题我这么处理可以么?

11 回复

去express 的github 提issue…

session过期了吧

这个问题肯定是你们程序的问题啊,首先判断客户端的cookie中的sid还在不在?如果在然后看redis中sid对应的记录还在不在,排除到是不是过期问题.

如果是过期了,应该怎么办?@leizongmin ,从新创建session 吗?

这不是丢session,而是session没有同步的问题吧……

Session被“过期”有两种情况:

  • Session ID (存储在Cookie中的)过期了,Session ID过期后,服务器会分配一个新的Session ID给当前客户端,这样的话,原来的Session数据也相当于失效了

  • 用来存储Session的数据库没有对应的数据了(比如Redis中设置了过期时间)

以上任意一种情况都会导致Session数据没有了。 看你具体使用那个Sesison中间件,我不太清楚,你自己去看文档。

@youxiachai @leizongmin @dengqiao 楼上的,我的应用有的时候几十分钟不操作,甚至开一天都不会影响session,有的时候操作几分钟或者啥都不操作,就变成undefined了,根本不是你们说的情况

这样的话只能看代码了,刚靠你简单的描述实在是猜不出来

是不是session跨进程了?

其实用node开发可以不用session,直接内对象+http header idI’d 更爽

如果用了cluster的话,就必须把session存到数据库才行(如 redis), 否则内容中的session在多个服务之间是不会共享和同步的.

回到顶部