我创建了一个用户需要登录的单页网站。用户在此页面上的时间可能不同,他们必须选择可能需要15分钟到几个小时的产品。
选择完成后,使用AJAX调用通过电子邮件发送选择以发送电子邮件。在这个AJAX调用中,$_SESSION['user_id']
用于标识用户,因此我们知道选择的来自谁。
如果用户花费的时间超过1440秒(24分钟),则会话到期。现在我将会话超时更改为3小时,但问题仍然存在。我几乎无法想象有人需要超过3个小时。但他们可能会这样做。也许用户会涌入,做一些杂货并继续。
那我怎么能解决这个问题呢?我想每5分钟使用一次AJAX调用,希望会话超时时间重置。但我不知道这是否有效,如果这是解决这个问题的方法。
答案 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,