session.cookie_lifetime 和 session.gc_maxlifetime

session.cookie_lifetime 和 session.gc_maxlifetime

Chris Yue No Comment
Posts

说起来惭愧得很,这种基础的东西现在才去花时间搞明白。however better late than never,总比永远没搞明白好。

session.cookie_lifetime 是 PHP 给浏览器设置的 cookie 的生命值,在过期时间内,PHP 只设置一次这个值,这就意味着一旦 PHP 让 session cookie 在浏览器里扎根,他的过期时间也就完全定下来了而且后来的访问也不会去改变它,验证方法就是设置 PHP 的 session.cookie_time 时间,然后在 firebug 里面看 cookie 的绝对过期时间(一定是创建时间 +session.cookie_time 设置的时间),你会发现过期时间一旦创建就不会再变了。

而 session.gc_maxlifetime 是指网站两次访问的间隔时间。如果间隔超过这个时间,就算 session cookie 没有过期,会话也被“回收”了(gc:garbage collection,垃圾回收之意)。

所以做类似银行系统这种安全性要求比较高的网站,gc_maxlifetime 一定要设置得短一些(另外gc是有一定几率才触发的,请见 PHP 关于session.gc_probability 和 session.gc_divisor)

PHP 的 session save handler 除了默认的文件存储方式外,也可以用 memcached 等其他工具来存储。如果使用 memcached 来做 session 存储工具,由于 memcached 自带过期时间设置,所以用它就不用关心 gc_maxlifetime,只要网站被访问都会刷新 memcached 的过期时间(如何设置可以看这篇文档)。

session.cookie_lifetime 和 session.gc_maxlifetime by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人

发表评论

25 − 19 =