Можно ли реализовать самоочищающуюся таблицу в mysql, или как поймать момент истечения сессии?

Хочу реализовать подобие самоочищающейся таблицы, из которой будут удаляться все записи с sessid = id истекшей сессии на этой машине. Либо сделать так, чтобы при достижении лимита строк старые строки выталкивались и их место занимали бы новые записи.

Начал смотреть в сторону memory, но это совершенно не то, что нужно. Можно реализовать подобное велосипедом из десятков строк php кода, но, тут уже встает вопрос о том, как поймать (без проверки по крону) истечение сессии. И может, есть более эффективные и простые способы (например, mysql триггеры), нежели создание велосипеда из десятков (если не сотен) строк кода?

Буду благодарен за советы и рекомендации, спасибо.
  • Вопрос задан
  • 2916 просмотров
Решения вопроса 1
alexclear
@alexclear
A cat
Не храните информацию о сессиях в MySQL, храните ее в таком хранилище, в котором можно задать время жизни записи при установке значения.
Например, в Redis.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
reffy
@reffy
Я молодец.
Что значит десятки-сотни строк кода? И вопрос "как поймать истечение сессии"? Так или иначе, в определённый момент вы запрашиваете сессию из базы, и проверить истекла она или нет, в этот самый момент, это совершенно дешево по ресурсам и решается строчкой кода.

Ну и раз вы за чистоту бд так боретесь, что готовы удалять сессии, что аж крон вам враг. То либо вы их не чистите вообще и они копятся мегабайтами, либо совершенно зря на этом зацикливаетесь.

И кто мешает сделать у пользователя(допустим таблица users) поле sid(в котором хранится id актуальной сесии). А sid в это случае - это ссылка на другую таблицу, где уже собственно вся информация по сессии доступна, и когда создана и всё остальное. Тут уже чистить особо ничего не надо.
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
Написать cron-задачу для очищения записей в таблице сессий старше заданной константы.
Ответ написан
Комментировать
@Lemfidavr
С триггерами на вряд ли что то получится.
Как писали выше, можно организовать с помощью cron`а.
Через PHP задавать время жизни сессии.
Больше адекватных решений я не вижу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы