gpt4 book ai didi

php - 如何在 PHP 中处理浏览器关闭注销?

转载 作者:行者123 更新时间:2023-11-29 08:41:49 25 4
gpt4 key购买 nike

我在登录用户关闭浏览器时遇到问题。由于浏览器关闭,我的代码无法运行,因此它们的登录状态无法更新为数据库中的“N”。另外,由于 session 被破坏,他们无法返回主页,因为我有此代码 if (!isset($_SESSION['logged in'])) { 等,以防止人们查看任何内容无需登录的页面。

当用户登录时,他们的登录状态更改为“Y”,我记录他们登录的时间。我在每个页面加载时记录他们的最后事件时间。如果用户在页面上闲置 20 分钟,我会将用户重定向到登录页面并更改他们的登录状态。由于浏览器关闭问题,我还有一个 cron 作业,该作业每 5 分钟运行一次,并检查用户上次事件是否超过 20 分钟,如果是,则其登录状态变为“N”

我认为由于浏览器关闭而导致用户必须等待 20 分钟以上才能重新登录的时间太长,因此我希望能够立即再次登录。

我读过有关 javascript 的卸载函数,但显然它不可靠。

还有其他方法可以解决这个问题吗?

最佳答案

关闭浏览器始终是客户端操作。因此,您需要 javascript 将操作发送到服务器,以便 PHP 执行某些操作。

你可以使用onbeforeunload向服务器发送一些东西,但它确实不可靠。更可靠的方法是使 session 时间短得多(例如:2分钟),然后每30秒对服务器进行一次ajax调用以保持 session 事件(确保其页面对服务器/连接影响很小) 。如果请求失败 4 次, session 将被销毁。现在您的 cronjob 可以每 2 分钟运行一次,用户只需等待那么长时间。

另一种方法是使用 GUID 在用户计算机上存储 cookie,并使用“Logged ='Y'”将其保存在数据库中。现在,当有人尝试登录已登录的帐户时,请检查是否是同一用户(cookie),如果是,则允许。这仍然使一个用户可以登录两次,只是更加困难,而且不是错误的。

关于php - 如何在 PHP 中处理浏览器关闭注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com