我想将登录、注销和持续时间存储在数据库中。

  • 登录时间在用户认证(登录成功)时创建
  • 当用户单击注销按钮时创建注销时间
  • 持续时间是注销-登录时间。(注销减去登录)

但问题是,如果用户没有点击注销按钮怎么办?以下是几种情况:

  • 网络丢失
  • 关闭浏览器/选项卡。(我需要这必须使用 javascript,但我不知道如何做到这一点,知道吗?)

编辑:

我忘了在问题中添加一些内容,该程序是一个完整的 flash 程序,没有导航到其他页面。仅 1 页

有帮助吗?

解决方案

如果用户只是关闭浏览器或从互联网上消失,您就不能依赖接收用户注销的事件。

在这种情况下,您必须有某种会话超时,并在您的应用程序意识到其会话太旧时记录注销。

如果这是一个真正的要求,那么我会说你需要一个“cron”作业来监视会话超时。当会话超时时,如果用户已登录,则会记录该用户的“注销”事件。

请注意,您不能使用(例如)ASPNET 的 Session_End 事件,因为该事件也不会被可靠地调用(例如,如果服务器进程重新启动)。

另一种选择是在用户下次登录时添加注销时间 - 当他们登录时,您检查旧会话并假设任何未关闭的会话自上次页面点击以来持续了固定的时间。

这确实是你所能做的。

其他提示

重要的是要记住 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

如果你想将会话状态存储在数据库中尝试任何 这些 指南. 。或者,自己推出 会话设置保存处理程序

关于浏览器/标签页的关闭,可以绑定 unload 事件 (window.onunload, jQuery 的 $(window).unload(fn), 或任何其他)来通知您的服务器。更通用的解决方案是定期对服务器执行 ping 操作(例如,每 5 分钟一次),但这可能会让用户感到厌烦,因此请谨慎执行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top