会话本身不应过期
我正在使用会话中的登录功能。我的这个会话在几分钟后过期,无论用户是否注销。现在我想要的是,会话应该只在用户注销时过期。如果用户没有注销他的帐户,然后在2-3天后回来,即使这样,他也应该显示为已登录。
我发现了一些示例,其中他们增加了会话过期的时间,但我希望它只应在用户注销事件时过期,而不管他注销所花费的时间如何。
我该怎么做?
特别是,这是正确的方法吗?
session_cache_expire(0);
session_start();
我正在使用会话中的登录功能。我的这个会话在几分钟后过期,无论用户是否注销。现在我想要的是,会话应该只在用户注销时过期。如果用户没有注销他的帐户,然后在2-3天后回来,即使这样,他也应该显示为已登录。
我发现了一些示例,其中他们增加了会话过期的时间,但我希望它只应在用户注销事件时过期,而不管他注销所花费的时间如何。
我该怎么做?
特别是,这是正确的方法吗?
session_cache_expire(0);
session_start();
在这种情况下,经常使用的解决方案是:
这边:
而且您具有“永不注销”的优势,至少从用户的角度来看是这样。
另请注意,对于“正常”会话,当用户关闭浏览器时,包含会话ID的cookie将被删除 - 因此,无论会话的生存期有多长,他都将断开连接。
使用我建议的解决方案,您是设置cookie应在用户计算机上保留多长时间的人;-)
但是,这意味着当用户手动注销时,您必须删除他的会话和cookie,当然 - 所以他不会立即重新自动登录。
当然,您必须小心您在cookie中设置的内容:Cookie不是很安全,因此不要在其中存储密码,例如;-)
实际上,这种做事方式就是“记住我”功能通常的工作方式。除了,在这里,您的用户将不必选中复选框来激活“记住我”;-)
如果你没有时间开发这种东西,一个非常快速和肮脏的方法是在所有页面上使用一些Ajax请求,这只会在服务器上“ping”一个PHP页面 - 这将使会话保持活动状态(但这不是一个很好的做事方式:你仍然会在服务器上有很多会话, 你会有很多无用的请求...并且只要用户不关闭浏览器,它才会起作用)。
你不能单独使用PHP内部会话处理来做到这一点。PHP将始终在会话cookie中发送会话ID,该会话ID将在用户关闭浏览器时过期。为了实现某种自动登录,您需要一些随附的代码,这些代码在用户的浏览器上设置更持久的cookie,并处理这些cookie的识别以及cookie值与相应用户帐户之间的映射。
请注意,这会极大地影响安全问题,因此您必须处理很多事情。请阅读以下内容,了解可能的自动登录功能如何工作: