如何保持用户会话的活动状态,即使他们意外关闭了浏览器。例如像Facebook一样。
如果您登录到他们的网站并关闭选项卡或浏览器,则再次打开浏览器并访问Facebook时,他们将自动检测活动用户,并不会将您重定向到登录页面。
我该怎么做?
如何保持用户会话的活动状态,即使他们意外关闭了浏览器。例如像Facebook一样。
如果您登录到他们的网站并关闭选项卡或浏览器,则再次打开浏览器并访问Facebook时,他们将自动检测活动用户,并不会将您重定向到登录页面。
我该怎么做?
有两个相关的设置控制着会话期的生命周期。
第一个是session.cookie-lifetime。这是cookie的生存周期,默认情况下为0,表示当浏览器关闭时将销毁cookie。通过增加此变量可以设置更长的生命周期。它是相对于服务器时间的,因此您需要考虑客户端机器和服务器的时间差异。假设它们相同,将选项设置为例如3600
将意味着会话将在一小时后过期。如果您想让会话保持活动状态很长时间,可以增加此数字。
但是仅更改此值是不够的。还有session.gc-maxlifetime,它是会话数据被视为垃圾并被销毁的时间。这与 session.cookie-lifetime
不同,因为此选项检查会话数据的最后一次访问时间,所以它是相对于会话数据上次使用的时间(即用户上次活动的时间)。即使您将session.cookie-lifetime设置为较高的值,也不足够,因为session.gc_maxlifetime通常很低(默认为1440
,仅为24分钟)。
如果有人遇到了同样的问题,要使会话cookie保持长时间很容易,在登录表单上,当您第一次创建会话时,请使用以下代码,它将设置Cookie时间为一年(根据需要使用自己的时间)。
ini_set('session.cookie_lifetime', 60 * 60 * 24 * 365);
ini_set('session.gc-maxlifetime', 60 * 60 * 24 * 365);
session_start();
session.cookie-lifetime
INI设置来覆盖这种行为:
http://www.php.net/manual/en/session.configuration.php
但请查看rekot的帖子以获取完整答案。你应该使用cookies: http://php.net/manual/zh/function.setcookie.php
只需存储一些唯一值,以帮助您识别用户。
无论如何,我强烈建议您使用某种框架,例如CodeIgniter或Zend Framework,除非您只是在学习它的工作原理。在这样的代码中很容易犯严重错误,大多数框架已经经过充分测试并且安全可靠。
setcookie
。是的,您总是可以“自己编写”会话处理程序,但 PHP 的内置会话处理程序是一个更简单的解决方案,并且它有设置会话生命周期的方法。 - Machavity
session.gc-maxlifetime
才能使其正常工作(有关详细信息,请参见我的答案)。 - reko_t