会话永远不会过期

dev*_*per 15 php session session-timeout

我在我的网站上使用登录功能与会话.无论用户是否已注销,我的本次会议都会在几分钟后过期.现在我想要的是会话应该只在用户注销时才会过期.如果用户没有注销他的帐户然后在2-3天后回来,那么他应该出现登录.

我已经找到了一些例子,他们已经增加了一个会话到期的时间,但我希望它只应该在用户退出事件时到期而不管他注销的时间.

我怎样才能做到这一点??

编辑:

session_cache_expire(0);
session_start();
Run Code Online (Sandbox Code Playgroud)

这是写这种方式吗?

Pas*_*TIN 26

在这种情况下,经常使用的解决方案是:

  • 有一个不太长的会话持续时间:如果用户不活动它将会过期(这只是它的工作方式 - 如果你有很多用户,这对你的服务器更好)
  • 当用户登录时,您设置一个包含他被识别所需内容的cookie
  • 如果他回到网站上(使用cookie,并且没有活动会话),则使用该cookie中包含的信息自动登录,同时重新创建会话.

这条路 :

  • 没有充分理由你没有成千上万的会议"活跃"
  • 你保持标准的会话工作方式

至少从用户的角度来看,你的优势是"永不被淘汰".

另请注意,对于"正常"会话,当用户关闭浏览器时,将删除包含会话ID的cookie - 因此,无论会话的生命周期是多长时间,他都将断开连接.
根据我提出的解决方案,您可以设置cookie应保留在用户计算机上的时间;-)


但这意味着,当用户手动注销时,您必须同时删除其会话和cookie - 因此他不会立即重新自动登录.


当然,你必须要小心你在cookie中设置的内容:cookie不是很安全,所以不要在其中存储密码,例如;-)


实际上,这种做事方式是"记住我"这个功能经常起作用的方式; 除此之外,您的用户不必选中复选框以激活"记住我";-)


如果你没有时间开发那种东西,一种非常快速和肮脏的方法是在你的所有页面上使用一些Ajax请求,这只会"ping"服务器上的PHP页面 - 这将保持会话活跃(但这不是一个很好的做事方式:你仍然会在服务器上有很多会话,你会有很多无用的请求......而且只有在用户没有的情况下它才会工作关闭他的浏览器).