Codeigniter的sess_time_to_update如何工作

And*_*ndo 12 codeigniter

基于以下问题/答案 CodeIgniter会话类无法在Chrome中运行

我遇到的问题是,人们无法从远离美国服务器的其他国家/地区登录我的网站.在线搜索之后,我偶然发现了一个建议,该建议描述了问题是如何根据服务器的时区和用户的时区之间的差异而定的.因此,通过扩展session_expiration,我设法解决了问题,人们可以成功登录.

我的问题是sess_time_to_update是否创建了一个新的时间戳,它会注销用户,因为新的时间戳是在错误的时区吗?我是否必须使新的sess_time_to_update超过17个小时,以便涵盖最广泛的时区,如我所链接的问题中所述.是否有其他方法可以根据用户的本地时间在用户的浏览器中存储会话(不要求他们在配置文件和其他类型的用户不友好方案中选择时区).我希望有一个2小时的默认会话到期时间+ 800秒.更新时间.我没有使用数据库来存储会话,我宁愿不使用它.

jus*_*mer 13

sess_time_to_update设置是多久会话详细信息(如上次活动)更新.默认值为每5分钟(300秒),将生成一个新的会话ID.这将根据sess_expiration设置重置到期日期.

我建议保持sess_time_to_update默认(或更低),因为会话过期将继续重置,这将使用户会话保持更长时间.唯一可能需要保持高位的设置是sess_expiration,除非您可以确定用户时区.

您可以通过多种方式尝试确定用户时区.一个是Javascript(例如:客户端时区偏移)或者您可以尝试使用PHP的GEOIP方法.

  • 正如前面的评论中提到的,它不仅仅是生成一个新的会话 ID。它还更新上次活动时间戳,从而更准确地保持会话处于活动状态。如果您将 `sess_time_to_update` 设置为高值,则即使用户会话可能正在积极执行某些操作,也可能会破坏用户会话。需要告诉 CI 定期更新,以便会话保持活动状态。频率应该取决于您的应用程序。如果您的会话时长为 3 小时,则少于 5 分钟可能有点过分,但如果您的会话设置为 15 分钟,则最好缩短时间范围 (2认同)