Я создаю сайт бронирования онлайн-билетов. В этом я делаю следующее: пользователь выполняет поиск в автобусе с номерами сидений. База данных обновляется с номерами мест с temp_seat_book = 'Y'
. Если он закажет деньги на оплату билета, его статус будет обновлен до final_ticket_book = 'Y'
. Теперь я хочу удалить поле, которое temp_seat_book = 'Y'
, но final_ticket_book = 'N'
. Для этого мне нужно удалить session_ids более 10 минут и final_ticket_book = 'N'
. Итак, как я могу реализовать фоновое задание?Неудачная сессия через некоторое время
ответ
Вместо того, чтобы делать поиск файлов (который включает в себя больше я/о) и т.д., Что такое куки сессии: Session Cookie
Лучший способ для хранения отметка времени «самой последней активности» в переменной $ _SESSION.
И обновление данных сеанса по каждому запросу (включая автоматические периодические вызовы ajax, если они есть).
Допустим, вы хотите сбросить сессию после 10 минут,
if (isset($_SESSION['most_recent_activity']) &&
(time() - $_SESSION['most_recent_activity'] > 600)) {
//600 seconds = 10 minutes
session_destroy();
session_unset();
}
$_SESSION['most_recent_activity'] = time(); // the start of the session.
Чтобы избежать атаки, как Session fixation: (Session Закрепление является атака, которая позволяет злоумышленнику угнать действующий сеанс пользователя) держать регенерирующий идентификатор сеанса периодически говорит в течение 5 минут (я бы предложил сохранить время регенерации, а также время истечения сеанса немного больше). Более подробный список атак: attack list.
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
}
else if (time() - $_SESSION['CREATED'] > 600) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
Кроме того, убедитесь, что session.gc-maxlifetime
устанавливается на максимум истекает время вы хотите использовать. Вы можете сделать это
ini_set('session.gc-maxlifetime', 600)
Или Установите его прямо в php.ini.
, а также
session.cookie_lifetime определяет срок службы куки в секундах, который отправляется в браузер.
Но, уничтожая сеанс, необходимо заботиться о стороне сервера, а не о стороне клиента. Установка параметра session.cookie_lifetime в 0 приведет к тому, что cookie сеанса будет вести себя так, как cookie сеанса должен быть, если cookie сеанса действителен только до закрытия браузера.
Хотя этот метод является немного утомительным, его более элегантным.
Ах, нашел ссылку, которую я прочитал давно! : How do I expire a PHP session after 30 minutes?
Стандартные сессии PHP хранятся в файлах. Вы могли бы реализовать простой скрипт, чтобы найти какой-либо файл сеанса, который не прикасался в течение 10 минут:
find /path/to/session/dir/* -mmin -10
Grep может использоваться, чтобы найти файлы сессий, которые имеют final_ticket_book = значение «N» в них хранятся :
grep -l 's:17:"final_ticket_book";s:1:"N";'
(флаги -l имеют grep, выплюнув имена файлов, которые соответствуют).
Объединение двух дает:
find /path/to/session/dir -mmin -10|xargs grep -l 's:17:"final_ticket_book";s:1:"N";'|xargs rm -f
- 1. PHP-сессия истекает через некоторое время
- 2. Неудачная сессия в SilverStripe
- 3. Сессия Некоторое время reurn Null И некоторое время reurn value
- 4. file_put_contents через некоторое время
- 5. java.lang.NoClassDefFoundError через некоторое время
- 6. Уведомление через некоторое время
- 7. ESP8266 отключается через некоторое время
- 8. Обработчик останавливается через некоторое время
- 9. Переменная сбрасывается через некоторое время
- 10. соединения закрываются через некоторое время
- 11. RadAjaxLoadingPanel исчезает через некоторое время
- 12. HttpWebRequest.GetResponse() истекает через некоторое время
- 13. закрыть активность через некоторое время
- 14. Скрыть подсказку через некоторое время
- 15. снятие изображения через некоторое время
- 16. Выполнение заявки через некоторое время
- 17. BroadcastReceiver остановился через некоторое время
- 18. Отображение UIAlertView через некоторое время
- 19. Сообщение исчезает через некоторое время
- 20. NotificationListenerService StopWorking через некоторое время
- 21. Accelerometr останавливается через некоторое время
- 22. Слои исчезают через некоторое время?
- 23. Сервлет отключается через некоторое время
- 24. Ошибка WMI через некоторое время
- 25. UILocalNotification повторяется через некоторое время
- 26. Функция завершается через некоторое время
- 27. Таймер зависает через некоторое время
- 28. остановка приложения через некоторое время
- 29. Значение сеанса изменится через некоторое время автоматически
- 30. Css не работает через некоторое время
как раз иметь отметку времени и проверить его? – footy
не было бы ни одного поля db 'seat_status' с одним из трех статусов. –
Возможно, вы нашли свой ответ здесь http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes –