在php和mysql中登录,注销和持续时间?

时间:2009-12-03 05:57:39

标签: php mysql login logout duration

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

  • 用户通过身份验证(成功登录)后创建登录时间
  • 用户点击退出按钮
  • 时会创建注销时间
  • 持续时间是注销 - 登录时间。 (退出减去登录)

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

  • 互联网丢失
  • 关闭浏览器/标签页。 (我需要这个必须使用javascript,但我不知道怎么做,任何想法?)

编辑:

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

3 个答案:

答案 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事件,因为它也不会被可靠地调用(例如,如果服务器进程重新启动)。

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

这就是你所能做的一切。