如何決定 session 時間?

火爆浪子
  • 2.8k

想請問一下
我在 php.ini 設定session是存在86400
但能不能讓他永久?
應該是說我可以在網頁上決定他多長,不會被php.ini 限制,那我php.ini 要怎麼設定呢?網頁上要怎麼設定呢?

回复
阅读 2.1k
6 个回答
✓ 已被采纳

你设置了 php.ini 的 session 时间,我觉得确实生效了。
你会发现,有些网站登录账号,你两个小时没有操作,挂着网页,再操作时会让你重新登录,这个才是 session 的有效期,你设置的 86400 只是这个时间。
而你说的过期则是另外一种过期:
你第一次访问页面,得到一个 session_id 0x01,而你关闭了浏览器,重新访问页面,由于 http 是无状态的,所以会重新分配一个 session_id 0x02 给你,实际上你第一次访问获得的 0x01 还没有过期,只是因为你当前的session_id变成了0x02


评论回复不能保持格式,在这里加一下

想要无限延长,可以这样做(laravel就是这样做的)

  1. 用户表增加一个字段 remeber_token
  2. 当用户登录成功时,生成一个随机字符串存入用户表的 remeber_roken,并返回给前端
  3. 前端把返回的 remeber_token 存入本地,试过 h5 的 localStore,或者其他。能永久存储的。
  4. 当用户再打开页面,session 过期要去登录时,直接判断 js 本地是否存储了remeber_token ,
  5. 如果有发送请求后台,后台请求数据库匹配出用户并登录

4.5 无限循环达到永久登录
清楚浏览器缓存会失效,只能重新登录

你在php.ini 里面把 session.cookie_lifetime 和 session.gc_maxlifetime设置的超大就行,例如999999999

经过和你的交流过程,我来做一下回答,上面他们的回答我也看了,也具有一定的道理,要做到你说的这个无限延时也可以做到,那么我站在安全性的角度来和你交流这个东西,虽然来说不一定全部正确,或者是有些地方考虑不够周到。

一般来说,你在浏览器上存一个cookie,cookie可以是一个token或者是key什么的,这个cookie过期时间设置为一个周或者24小时,如果用户在这个期间没有访问,那么就让这个用户重新登录。在数据库中的用户表也用一个字段来记录这个token,每次对比一下,如果数据表中存在这个token,且数据表中设置的过期时间满足,则创建一个新的token存到浏览器,然后再以设置的时候为开始时间再计算出一个有效期,这样子的话,只要用户在指定的时间访问平台,让用户感觉是没有退出登录的,而用户退出后超出一段时间没登录,就重新发起登陆,防止别人拿到这个token了就可以一直模拟这个用户访问这个用户的数据资料或者操作这个用户的数据。

而刷新token的作用主要就是防止别人拿到cookie就可以模拟这个用户登陆,而同时又可以保持用户不会退出登录,相当于做了一道安全措施。

其他的相关想法欢迎探讨

如果想突破单纯的session限制,可以不考虑用php的session,直接把起始时间戳存入数据库,然后自定义过期时间3年,5年,10年... 是这个意思吗?

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

宣传栏