就是我nodejs应用中,老是莫名其妙的session就没了(express)
比如req.session.userid 初始化为123456
过阵子req.session.userid变成了undefined…
但是我没权限读写公共redis。后来我跟后端商量了下让他写了个读写session的口子暴露给我。(get set del)
这个丢session是怎么造成的啊? 对于这个问题我这么处理可以么?
去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在多个服务之间是不会共享和同步的.
express-session 设置的时候不是有个cookie参数么,那就是过期时间,你设大一些就好了。