【问题标题】:Timeout or Re-activate DB entry in PHPPHP 中的超时或重新激活数据库条目
【发布时间】:2011-10-13 16:46:14
【问题描述】:

我正在从事一个涉及多个用户并能够更改数据的项目。

基本上,当用户登陆页面时,他可以在数据库中输入特定条目的信息。当他在此页面上时,没有其他用户可以访问该特定条目。当他完成时,入口再次打开。现在,限制对条目的访问很容易。我将其设置为何时选择特定条目时,DB状态中的值它是“非活动”,也没有其他人可以到达该页面。在页面本身上,有一个“离开”和一个“提交”按钮。其中任何一个都会将该条目设置回活动状态。

我遇到的问题是,如果用户决定点击不同的链接、关闭标签或以某种方式离开。如何构建它以将条目恢复到活动状态?我正在研究“onunload”事件并可能使用它来进行 AJAX 调用。这是最合乎逻辑的路线,还是由于我的知识有限而缺少类似的东西?感谢您的所有帮助。

【问题讨论】:

    标签: php javascript jquery mysql theory


    【解决方案1】:

    我不会采用onunload 的方式(至少不是唯一的方式),因为它在发生崩溃、断电等情况时不可靠。在这种情况下,条目可能会被“永久”锁定。

    我会在页面中嵌入一个 Ajax 方法,它会定期请求 PHP 脚本来“确认”页面仍然存在。

    您可以使用此类“确认”请求来构建/更新表以跟踪当前锁定,使用类似 lock_id 的 s/t 来唯一标识被锁定的“条目”,session_id 来唯一标识浏览器持有该锁的会话和expire_timestamp 设置应该再次解锁“条目”的时间,以防session_id 的“确认”请求进入并提高其expire_timestamp

    结合 cron 作业,定期删除超过 expire_timestamp 的记录,这应该是一种更可靠的方式来实现您想要实现的目标。

    【讨论】:

    • 好的。这似乎是最合乎逻辑的方法。感谢您的帮助!
    【解决方案2】:

    我曾处理过类似的问题,“onunload”是正确的方法。不利的一面是,如果浏览器崩溃或被杀死(来自任务管理器),则不会调用卸载。因此,如果与该条目对应的 sessionId 不存在,则最好有一个将条目设置为活动状态的作业。 (您也可以存储 sessionId 和 isactive 锁的组合来检测浏览器的空闲状态)

    【讨论】:

    • 是的,我主要担心浏览器错误和 Opera 不喜欢 onunload。设置一个定期清理的 cron 作业将有助于对冲我的赌注。
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多