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