我在我的网站中使用登录功能与会话。无论用户是否已经注销,我的会话都会在几分钟后过期。现在我想要的是会话应该只在用户注销时过期。如果用户没有注销他的帐户,然后在2-3天后回来,那么他应该会出现登录状态。
我找到了一些例子,他们增加了会话到期的时间,但我希望它只会在用户退出事件时到期,无论他注销的时间如何。
我怎样才能做到这一点?
特别是,这是正确的方法吗?
session_cache_expire(0);
session_start();
在这种情况下,经常使用的解决方案是:
这条路:
并且你有“永不退出”的优势,至少从用户的角度来看。
另请注意,对于“正常”会话,当用户关闭浏览器时,将删除包含会话ID的cookie - 因此,无论会话的生命周期是多长时间,他都将断开连接。 根据我提出的解决方案,您可以设置cookie应保留在用户计算机上的时间;-)
但这意味着,当用户手动注销时,您必须同时删除其会话和cookie - 因此他不会立即重新自动登录。
当然,你必须要小心你在cookie中设置的内容:cookie不是很安全,所以不要在其中存储密码,例如;-)
实际上,这种做事方式是“记住我”这个功能经常起作用的方式;除此之外,您的用户不必选中复选框以激活“记住我”;-)
如果你没有时间开发那种东西,一种非常快速和肮脏的方法是在你的所有页面上使用一些Ajax请求,这只会“ping”服务器上的PHP页面 - 这将保持会话活跃(但这不是一个很好的做事方式:你仍然会在服务器上有很多会话,你会有很多无用的请求......只有当用户不这样做时它才会工作关闭他的浏览器)。
单独使用PHP内部会话处理不能这样做。 PHP将始终在会话cookie中发送会话ID,该会话cookie将在用户关闭浏览器时到期。要实现某种自动登录,您需要一些附带的代码,在用户的浏览器上设置更长的cookie,并处理这些cookie的识别以及cookie值与相应用户帐户之间的映射。
请注意,这极大地影响了安全问题,因此您必须处理很多事情。请阅读以下有关可能的自动登录功能如何工作的信息:
你在测试时删除了你的cookie吗?是否启用了Cookie?你在代码中的某处破坏了会话吗?
另外,请参阅我对另一篇文章的回答:Quick question about sessions in PHP,它解释了如何保持登录状态。如果您希望用户永远保持登录状态,请不要执行cronjob / sheduled任务。