攻城狮 1,083 views
最近用到 php 中 session 时,忽然发现 php 中的 session 有点让人头疼啊,要设置一个严格的特定时间内过期的
session 还真不太容易!
后来在网上查询时,发现这个问题还真是有点普遍,网上也有关于这个问题的面试问题,如:如何严格限制 session 在
30 分钟后过期!这个问题的答案顺便也写在这里
1.设置客户端 cookie 的 lifetime 为 30 分钟;
2.设置 session 的最大存活周期也为 30 分钟;
3.为每个 session 加入时间戳,然后在程序调用时进行判断;
至于为什么,我们首先来了解下 php 中 session 的基本原理:
PHP 中的 session 有效期默认是 1440 秒(24 分钟),也就是说,客户端超过 24 分钟没有刷新,当前 session 就会失
效。当然如果用户关闭了浏览器,回话也就结束了,Session 自然也不存在
了!
大家知道,Session 储存在服务器端,根据客户端提供的 SessionID 来得到这个用户的文件,然后读取文件,取得变量
的值,SessionID 可以使用客户端的 Cookie 或者 Http1.1 协议的
Query_String(就是访问的 URL 的“?”后面的部分)来传送给服务器,然后服务器读取 Session 的目录……
要控制 Session 的生命周期,首先我们需要了解一下 php.ini 关于 Session 的相关设置(打开 php.ini 文件,在
“[Session]”部分):
1、session.use_cookies:默认的值是“1”,代表 SessionID 使用 Cookie 来传递,反之就是使用 Query_String 来传递;
2、session.name:这个就是 SessionID 储存的变量名称,可能是 Cookie,也可能是 Query_String 来传递,默认值是
“PHPSESSID”;
3、session.cookie_lifetime:这个代表 SessionID 在客户端 Cookie 储存的时间,默认是 0,代表浏览器一关闭
SessionID 就作废……就是因为这个所以 Session 不能永久使用!
4、session.gc_maxlifetime:这个是 Session 数据在服务器端储存的时间,如果超过这个时间,那么 Session 数据就自
动删除!
还有很多的设置,不过和本文相关的就是这些了,下面开始讲如何设置 Session 的存活周期。
前面说过,服务器通过 SessionID 来读取 Session 的数据,但是一般浏览器传送的 SessionID 在浏览器关闭后就没有了,
那么我们只需要人为的设置 SessionID 并且保存下来,不就可以……
如果你拥有服务器的操作权限,那么设置这个非常非常的简单,只是需要进行如下的步骤:
1、把“session.use_cookies”设置为 1,使用 Cookie 来储存 SessionID,不过默认就是 1,一般不用修改;
2、把“session.cookie_lifetime”改为你需要设置的时间(比如一个小时,就可以设置为 3600,以秒为单位);
3、把“session.gc_maxlifetime”设置为和“session.cookie_lifetime”一样的时间;
评论0
最新资源