Session
保存在服务端。保存在超全局变量 $_SESSION
。
Session 文件驱动注意 阻塞
问题。
Session 过期
1 | session.gc_maxlifetime=1440 |
session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc 进程的概率。此概率用 gc_probability/gc_divisor
计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。
比如:session.gc_maxlifetime=30,session.gc_divisor=1000,session.gc_probability=1,就表示每一千个用户调用 session_start() 就百分百的会执行一次垃圾回收机制。
所以过期 session 是由 gc 处理的,不是自己自动消失的。
假设 gc_maxlifetime=120 如果某个 session 文件最后修改时间是 120 秒之前,那么在下一次回收( 1/100 的概率)发生前,这个 session 仍然是有效的。所以并不是 session 过了有效期,就一定访问不到!
严格控制过期时间
设置 Cookie 过期时间 30 分钟, 并设置 Session 的 lifetime 也为 30 分钟.
自己为每一个 Session 值增加 Time stamp.
每次访问之前, 判断时间戳.
1 | ini_set('session.gc_maxlifetime', "1800"); // s |
设置 Session
1 | session_start([$options]); |
PHPSESSIONID
保存在服务端文件中,也将 id 保存在 Cookie
中,也可以通过 url 传递。
通过 Cookie
设置 Session
生存期
1 | session_id(); // 设置 session id |