当用户关闭浏览器时,保持与数据库mysql的通信

时间:2013-06-05 18:07:01

标签: mysql linux php

我目前需要帮助同志。我正在基于php进行应用程序开发,应用程序是quesionaire系统,当用户已经启动时系统有倒计时器60分钟(点击开始按钮)。 到目前为止,当用户进入会话登录时,我可以将计时器推送到数据库,我每秒更新一次数据库。并且当前系统是用户注销时倒数计时器将停止,示例用户在30分钟倒计时时注销。因此,当用户登录时仍然需要30分钟。

但是我的客户不喜欢它。我的客户想要用户已经点击开始按钮,所以倒数计时器将持续到60分钟,即使用户在60分钟之前没有注销或用户关闭浏览器直到60分钟。

所以我的问题是如何实现的?当用户点击按钮启动时我必须做什么? 我想当用户单击按钮启动时将倒计时器推送到数据库mysql,用户关闭浏览器倒计时总是推送到数据库。

结构数据库表是:

- id (int) auto_increment;
- user_id (int);
- residual_time (int); <--I push it per second, so per second will update it until 0.

我的服务器使用linux ubuntu服务器。我是服务器的所有者。

谢谢。

1 个答案:

答案 0 :(得分:0)

我会完全按照@Joachim的建议行事,并遵循以下流程:

  • residual_time替换为start_time,类型为日期时间。
  • 添加类型为datetime的last_update
  • 当用户点击“开始”时,使用start_time MySQL功能设置last_updateNOW()
  • 编写一个函数并每隔30个用AJAX运行一次?第二个检查last_update是否在start_time后60分钟,如果是,则停止调查问卷并同时清除start_timelast_update

现在让我们假设一个用户退出并在分配中途退出,然后重新登录以继续:

//sudo code example
//check if start_time is set
if(isset(start_time)){
    //check if last_update time is set
    if(isset(last_update)){
        //calculate the time difference in minutes from previous start_time and last_update time
        time_diff = last_update - start_time;
        //if time difference is less than alloted time example 60 minutes
        if(time_diff < 60 minutes){
            //update start_time with current time less time difference for already used time
            start_time = NOW() - time_diff minutes
        //if time difference is greater than the allotted time
        } else {
            //kill the page with the time expired message
            die(Your time has expired);
        }
    //if last_update time is not set
    } else {
        //set start_time to NOW()
        start_time = NOW();
    }
//if start_time is not set
} else {
    //set start_time to NOW()
    start_time = NOW();
}