在PHP中建立4个严格的30分钟会话面试的答案

今天我在微博上发布了一个问题:

当我面试的时候,我经常问一个问题:如何设置一个30分钟的过期会话,不要认为它看起来简单,它包含了很多知识,特别是对于基本技能都是扎实的,谁会回答试试,呵呵

你为什么问这个问题

1。我看到有些人在谈论这个问题上计算器

2。我经常问这个问题,所以~

这里,我来回答这个问题。

第一个答案

最常见的一个答案,然后,是集会议、到期时间,session.gc_maxlifetime。这个答案是错误的,原因如下:

1。首先,这个PHP是以一定概率进行GC运行会话,即session.gc_probability和session.gc_divisor(参见PHP使用权限被拒绝通知会话遇到溶液),默认值分别为1和100,这在会话启动会话GC PHP 1%的机会,手术不能保证。30分钟将过期。

2。这套高概率机会或清洁不当,因为使用PHP会话文件属性以确定是否过期的修改时间,如果这会降低性能的概率增加,其次,PHP使用文件和会话的会话相关的变量,如果我建立了一个5分钟前一个= 1会话变量,5分钟后建立一个B = 2会话变量,那么这个会议文件的修改时间添加时间B的时刻,那么一个不会在30分钟的时候,被清除。除了以下第三个原因。

三.PHP默认值(例如Linux)是默认的存储目录,使用会话作为会话,而手册中的描述如下所示:

注:不同的脚本,如果有不同的session.gc_maxlifetime值,但共享同一个地方来存储会话数据,最小值的脚本会清理数据。在这种情况下,使用这个指令与session.save_path。

也就是说,如果有两个应用程序没有指定自己的独立save_path,设定过期时间为2分钟(说),一套30分钟(假设为B),那么每次会话GC,也将删除B会话文件。属于应用程序

因此,第一个答案并不完全严格和正确。

第二类答案

另一个常见的答案是建立会话ID和Cookie的到期日期,即会话的载体。cookie_lifetime,也是不正确的。

这只是另一个过期过期的cookie,说要检查曲奇和会话之间的差异,会话和cookie服务器过期过期,过期是客户端(浏览器)来确保,即使您设置cookie过期,此时也只能保证标准浏览器过期,将发送cookie(包括会话和ID)。如果构造请求,或者可以使用会话id值。

第三种答案

使用memcache,redis,,好吧,这个答案是正确的答案。然而,很显然,只要使用PHP,这个主题肯定会再次问您。

第四种答案

当然,面试不是为了你,而是为了深入调查思想。在这个过程中,我将揭示这些陷阱,所以一般来说,它是要做的:

1。将cookie过期时间设置为30分钟,并将会话的生命周期设置为30分钟。

2。添加时间戳。对于每个会话值

三.每次访问前判断时间戳。

最后,有同学问,为什么要设定30分钟的到期时间:第一,这是面试,第二,实际使用的场景,比如30分钟过期的优惠券。

谢谢:)