2014-08-21 4 views
0

Я создал сайт с одной страницей, на котором пользователи должны зарегистрироваться. Пользователи времени на этой странице могут отличаться, они должны сделать выбор продуктов, которые могут занять от 15 минут до нескольких часов.Сессии истекают на одной странице страницы

После того, как выбор будет выполнен, выбор будет отправлен по электронной почте с использованием вызова AJAX для отправки электронной почты. В этом вызове AJAX $_SESSION['user_id'] используется для идентификации пользователя, поэтому мы знаем, от кого идет выбор.

Если пользователь занимает больше времени, чем 1440 секунд (24 мин), сеанс истекает. Теперь я изменил тайм-аут сеанса на 3 часа, но проблема все еще существует. Я почти не могу представить, что кто-то занимает больше 3 часов. Но они, вероятно, это делают. Возможно, пользователи входят в систему, делают некоторые продукты и продолжают.

Так как бы я мог решить эту проблему? Я думал использовать AJAX-вызов каждые 5 минут в надежде, что время ожидания сеанса будет сброшено. Но я не знаю, работает ли это, и если это способ исправить эту проблему.

+0

вы начали сессию в верхней части страницы, как 'session_start();' –

+1

См: http://stackoverflow.com/questions/3476538/php -sessions-timing-out-too-soon – Yorick

+0

@SKRocks, да, я начал сеанс после входа пользователя в систему. Страница входа в систему - это страница differte и после входа в систему пользователь перенаправляется на другую страницу. Эта страница выполняет 'session_start()'. – Timo002

ответ

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

У меня есть решение ..

Хотя это немного сложно один.

Если пользователь находится внутри страницы, если он находится в режиме ожидания, то его мышь не будет двигаться ..

Вы можете сделать то, что на MouseMove и может вызвать функцию Ajax, которая будет задавать timeof mousemove в базу данных, отвечающую пользователю.

Скажет, пользовательская таблица будет Loke этого

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

, где last_activity_contains 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 

Теперь на каждый MouseMove это значение будет обновляться.

Теперь вы должны запустить хрон j0b с сервера, который будет вызывать PHP-файл, который в свою очередь будет проверять whther разница между 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, 
+0

Я понимаю, что вы написали. Но это приведет к выходу пользователя из системы, и я не хочу, чтобы пользователь вышел из системы. Сессия должна сохраняться, даже после 1 часа бездействия. – Timo002

Смежные вопросы