PHPSESSID 过期时间设置为N/A,在iOS下无效

今天遇到一个问题

我们项目的登录状态是由PHPSESSID来判断的

然后产品提出了一个需求是,手机浏览器上登录之后,关闭浏览器再打开,登录状态需要还存在,

于是后台开发将PHPSESSID的过期时间设置为N/A,即永不过期。

然后在测试阶段发现在PC端浏览器和android系统下手机浏览器都正常,登录之后,关闭浏览器再打开,getuserinfo这类接口依然能请求到用户信息,判断为已登录

但是在iOS下的safari和其他第三方浏览器下测试,发现每次关闭浏览器再打开,登录状态都没了,PHPSESSID已经换了一个新的,并不是上次登录时的PHPSESSID,由此造成登录状态的丢失

然后我想起来我之前做的一个项目,并不存在这个问题,并且前端代码这块的逻辑是一样的,所以我将两个项目对比,发现之前没有问题的代码,它的PHPSESSID过期时间是一个具体时间,比如七天后,而这个有问题的项目它的PHPSESSID过期时间是N/A,除了这里不同之外,别的都是一样的代码和设置,于是让后台将本项目的PHPSESSID也设置一个具体过期时间,比如七天后,一天后这样的,然后再测试就发现完美解决了iOS下的这个问题

所以想问一下,PHPSESSID的过期时间设置为N/A,在iOS下是否是无效的?...我百度和Google之后也没有找到相关的问题,请问有对这个有了解的吗? 能否解答一下这个情况

阅读 3.1k
1 个回答

换成token + COOKIE,或者token + localStorage 。
session 在下发给浏览器时,浏览器会存储sessionId,但是这个 COOKIE 没有有效时常,即自浏览器关闭就会重新分配。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题