会话在单页网站上过期

时间:2014-08-21 06:56:10

标签: php ajax session

我创建了一个用户需要登录的单页网站。用户在此页面上的时间可能不同,他们必须选择可能需要15分钟到几个小时的产品。

选择完成后,使用AJAX调用通过电子邮件发送选择以发送电子邮件。在这个AJAX调用中,$_SESSION['user_id']用于标识用户,因此我们知道选择的来自谁。

如果用户花费的时间超过1440秒(24分钟),则会话到期。现在我将会话超时更改为3小时,但问题仍然存在。我几乎无法想象有人需要超过3个小时。但他们可能会这样做。也许用户会涌入,做一些杂货并继续。

那我怎么能解决这个问题呢?我想每5分钟使用一次AJAX调用,希望会话超时时间重置。但我不知道这是否有效,如果这是解决这个问题的方法。

1 个答案:

答案 0 :(得分:0)

NOTE: I have edited the answer. Check it out fully. 
      First time I missed some points

我有一个解决方案..

虽然这有点棘手。

如果用户在页面内,如果他空闲,那么他的鼠标就不会移动..

你可以做的事情就是在mousemove上你可以调用一个ajax函数,它会将mousemove的时间设置为对应于用户的数据库。

说用户表是这个

|-----------------------------------------------|
|   id   |    last_active_time  |  login_status |
|-----------------------------------------------|
|    3   |        1243236456    |      1        |
|-----------------------------------------------|

其中last_activity_contains由time()提供的php时间戳;如果用户未登录,则登录用户登录名为login_status = 1,登录名为login_status = 0。

When a user logs in and his session starts, 
          change the login_status = 1,
When user manualy logs out change login_status = 0. 
So from backend side, you can also check whether a user is 
logged in w.r.t the value of login_side

现在每个鼠标移动都会更新此值。

现在你必须从服务器运行一个cron j0b,它将调用一个php文件,这反过来将检查mousemove时间和当前时间之间的差异是否超过30分钟..

如果超过30分钟,则将login_status设置为0。

EDIT:

You can change the 30 minutes frame to 1 or 2 hour.
The other solution is put another ajax call in every 10 minutes, which will check if
the login_status is 0 or 1. If the login status is 1 then the session will again be 
refreshed and as such the time_out will again start for next timeout session,