PHP запускает скрипт, когда сессия истекает - PullRequest
5 голосов
/ 07 декабря 2011

У меня есть приложение корзины с уникальными товарами с количеством 1 - мне нужно израсходовать количество товара, когда пользователь кладет его в корзину, чтобы никто не купил его.Проблема в том, что если они покидают корзину без покупки, мне нужно положить товар обратно на склад.

Есть ли способ пополнить запас, когда сессия корзины заканчивается?т.е. запустить скрипт для замены стоковой.

Ответы [ 3 ]

4 голосов
/ 07 декабря 2011

Вы можете использовать session_set_save_handler для создания пользовательского класса обработки сеанса. Когда вы сделаете это, вы можете решить другие действия, которые должны выполняться либо при вызове сборщика мусора, либо при уничтожении сеанса. Если вы решили работать с сборщиком мусора, убедитесь, что вы также знаете значения для session.gc_divisor и session.gc_probability, а также понимаете, что они делают (они устанавливают вероятность запуска сборщика мусора).

2 голосов
/ 07 декабря 2011

Во избежание необходимости работы cron;не усложняйте:

  1. Пользователь выбирает места объекта в своей корзине
  2. Отметка времени для «помещения объекта в корзину» сохраняется в базе данных, а отметка времени ожидания сохраняетсятоже.Например, (time() + (60*20))
  3. Пользователь закрывает веб-страницу
  4. При каждой загрузке страницы вы выполняете простой mysql-запрос, чтобы проверить, меньше ли timeout-timestamp, чем текущая отметка времени.Если запрос возвращает результат, удалите его из корзины и поместите обратно в слот.

(для этого также необходимо обновить какое-то «последнее действие» в базе данных)

Следуетбудь довольно прямым.

0 голосов
/ 07 декабря 2011

Создайте таблицу базы данных для отслеживания активности сеанса, скажем, sessions. В нем укажите как минимум поля session_id и поле DATETIME или TIME, называемое last_activity.

Если у вас его еще нет, также создайте таблицу carts, которая содержит содержимое корзины (например, product_id и quantity) и имеет ссылку на session_id. Тогда есть 2 сценария:

  1. Пользователь завершает заказ, просто «стирает» строки в таблице carts, принадлежащие их сеансу.
  2. Пользователь покидает корзину, вызывает cronjob, который проверяет, больше ли значение last_activity, чем вы хотите (скажем, более часа назад). Заставьте этот сценарий пополнить запас на количество, которое было в корзине.

Обратите внимание, что вам нужно обновить поле last_activity в загрузчике / загрузчике (механизм, который запускается на каждой загруженной странице).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...