php和mysql中的登录,注销和持续时间?
Posted
技术标签:
【中文标题】php和mysql中的登录,注销和持续时间?【英文标题】:Login, logout and duration time in php and mysql? 【发布时间】:2010-12-22 17:11:11 【问题描述】:我想在数据库中存储登录、注销和持续时间。
登录时间在用户通过身份验证(成功登录)时创建 用户点击注销按钮时创建注销时间 持续时间是注销 - 登录时间。 (注销减去登录)但问题是,如果用户没有点击注销按钮怎么办。以下是情况:
网络丢失 关闭浏览器/选项卡。 (我需要这个必须使用 javascript,但我不知道该怎么做,知道吗?)编辑:
我忘了在问题中添加一些内容,该程序是一个完整的 Flash 程序,没有导航到其他页面。只有 1 页
【问题讨论】:
您实际上只需要存储开始和结束日期时间 - 您可以根据需要计算持续时间,而不是存储它。 注销的东西怎么样。我忘了在问题中添加一些内容,该程序是一个完整的 Flash 程序,没有导航到其他页面。只有 1 页 网络服务器上的默认会话设置为 20 分钟。如果没有注销,登录后 20 是您可以假设的最多时间。没有可靠的方法可以知道连接何时中断,并且不值得我通过 AJAX 调用每隔一段时间写入一个临时值进行跟踪。 你的问题的另一半之前已经被问过 - 例如。 ***.com/questions/887919/… @Dominic:您的意思是通过 $_SESSION 时间活动进行检查?每当用户点击一个东西,做检查?恐怕我无法在我的系统中实施。会造成迟钝。怎么样,js window.onunload 事件?我不确定它是否好用。请指教 【参考方案1】:关于关闭浏览器/选项卡,您可以绑定unload
事件(window.onunload
、jQuery 的$(window).unload(fn)
或任何其他)来通知您的服务器。更通用的解决方案是定期 ping 您的服务器(例如,每 5 分钟一次),但这可能会让用户感到厌烦,因此请谨慎行事。
【讨论】:
【参考方案2】:如果用户只是关闭浏览器或从互联网上消失,您不能依赖接收事件来让用户退出。
在这种情况下,您必须设置某种会话超时,并在您的应用意识到会话太旧时记录注销。
如果这是一个真正的要求,那么我会说您需要一个“cron”作业来监控会话是否超时。当会话超时时,如果已登录,它会为该用户记录一个“注销”事件。
请注意,您不能使用(例如)ASPNET 的 Session_End 事件,因为它也不会被可靠地调用(例如,如果服务器进程重新启动)。
另一个选项是在用户下次登录时添加注销时间 - 当他们登录时,您会检查旧会话并假设任何未关闭的会话自上次访问页面后持续了固定时间。
这就是你所能做的。
【讨论】:
【参考方案3】:请务必记住,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 滚动您自己的
【讨论】:
以上是关于php和mysql中的登录,注销和持续时间?的主要内容,如果未能解决你的问题,请参考以下文章