我想将登录,注销和持续时间存储在数据库中。
但问题是,如果用户没有点击退出按钮怎么办?以下是情况:
编辑:
我忘了添加一些问题,程序是一个完整的flash程序,没有导航到其他页面。只有1页
答案 0 :(得分:1)
重要的是要记住,PHP中的所有会话/登录功能都是通常基于的cookie。因此,更改会话cookie的生命周期应该可以解决您的问题:
http://us3.php.net/manual/en/function.session-set-cookie-params.php
此外,您可以设置PHP会话,以便它们仅使用cookie:
http://us2.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies
同样,您可以关闭浏览器窗口/标签但是......为什么?例如,我可能会在多个标签页中打开您的网站。如果我关闭其中一个标签,我应该自动退出您的网站吗?这是一个非常糟糕的设计。相反,设置会话生存期,使其在浏览器关闭时过期,而不仅仅是选项卡。 (另请注意,window.unload
会在您关闭的网站任何窗口时退出 - 包括弹出窗口或iframe。您真的想要吗?)
http://us2.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
如果您想在数据库中存储会话状态,请尝试one of these guides。或者,使用session_set_save_handler
滚动自己答案 1 :(得分:0)
关于浏览器/选项卡的关闭,您可以绑定unload
事件(window.onunload
,jQuery的$(window).unload(fn)
或任何其他事件)以通知您的服务器。一个更通用的解决方案是定期ping您的服务器(例如,每5分钟),但它可能会让用户烦恼,所以明智地这样做。
答案 2 :(得分:0)
如果用户只是关闭浏览器或从互联网上消失,您就不能依赖于用户退出活动。
在这种情况下,您必须有某种会话超时,并在您的应用实现其会话太旧时记录注销。
如果这是一个真正的要求,那么我会说你需要一个“cron”工作来监控会话的超时时间。当会话超时时,如果已登录,则会为该用户记录“注销”事件。
请注意,您不能使用(例如)ASPNET的Session_End事件,因为它也不会被可靠地调用(例如,如果服务器进程重新启动)。
另一种选择是在用户下次登录时添加注销时间 - 当他们登录时,您检查旧会话并假设任何未关闭的会话持续了自上一页命中以来的固定时间。
这就是你所能做的一切。