0

我是 PHP 新手,我曾经用它开发一个小型网络应用程序。在我的设计中,我指望了一个我最初认为很容易使用的功能,但我越深入,我就越意识到这可能是一个相当基本的问题。

设置如下:

  • 我有数据块,我们称它们为 data_1,...,data_n

  • 对于任何 i,data_i 可能无法访问

  • 当用户连接时,他会获得第一个可用的大量数据并将其标记为不可访问

  • 当用户停止工作时,数据可以再次访问

  • 没有登录,会话 id 用于用户识别

  • 数据存储在 MySQL 数据库中

现在,我以这样一种方式实现了它,即在请求时,用户用数据锁定表,找到第一个可用的,设置标记并解锁表。

问题是当用户没有删除标记时 - 默认情况下,我需要在某个时候再次使数据可用。

我试过 JS,但 Window.onbeforeunload 不能保证运行(例如在崩溃时)。

我尝试运行一个 PHP 脚本来轮询连接。但是我需要在两者之间执行其他脚本,我明白这是不可能的,因为当时只有一个脚本可以访问会话数据,因此轮询脚本会阻止其他脚本的执行。

我已经通过保存与用户独占访问的数据的每次通信的时间戳来解决这个问题(并添加在窗口打开时建立连接以防止超时的脚本)。如果新用户来了,他会检查时间戳,如果有足够长的暂停,他会获取数据并存储他的时间戳。

然而,我的解决方案是一种解决方法,并不能真正解决问题。谷歌搜索显示,每个人都在询问连接丢失后如何保持执行的问题 - 但这不仅仅是这种情况,因为对我来说,连接丢失时没有执行。

问题是:如何使用 PHP 5.4 创建一个在连接丢失后执行的脚本?

谢谢。

4

2 回答 2

0

你可以这样做。

  1. 与您相关的 session_ids 和您正在为具有该 seesion_id 的用户锁定的数据。

2.当用户在您的网页上启动时,您可以session_id()使用当前时间戳将他/她的会话 id ( ) 插入数据库中。

每 20 分钟(使用 cron 作业)或在每个页面请求上检查您的数据库表以获取最近 20 分钟内活动的 Seesion id 列表。

获取该列表并为该会话 ID 保持锁定,并为其余的 session_id 解锁关联的表。

于 2013-10-17T15:46:38.760 回答
0
  1. 你需要使用套接字。

2.查看“示例 #1 Aignore_user_abort() 示例”

于 2013-10-17T13:50:58.360 回答