Подскажите, пожалуйста, по сессиям авторизации в php

R
На сайте с 18.12.2009
Offline
92
646

На самописном движке таблица `users` содержит, например, `id` и `hash` значения, которых также у пользователя в куках после авторизации. Получается, что одновременно можно быть залогиненным только с 1 устройства.

Решить проблему можно, создав, например, таблицу `users_sessions` и хранить там данные сессий.

А вопрос такой - как удалять эти сессии? Если юзер произвел выход с сайта - сессия удалилась, все норм. А если не произвел?

Создал я куку на неделю. У юзера кука сама сдохла, а в базе сессия осталась. Так сессии плодятся и плодятся. Как автоматизировать их чистку в mysql? Кроном сравнивая время создания/жизни?

Или может решение нереально простое, но я не додумался.

Спасибо.

LEOnidUKG
На сайте с 25.11.2006
Offline
1772
#1

Хранить файлы сессий в папке отдельной, и периодически проверять её.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
R
На сайте с 20.02.2015
Offline
59
#2

PHP разве не очищает автоматом устаревшие файлы сессий?

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

Есть для этого переменная $_SESSION, данные в ней умрут по истечению жизни сессии и файл сессии удалиться, если я не ошибаюсь.

totamon
На сайте с 12.05.2007
Offline
437
#3
rerighter:
Получается, что одновременно можно быть залогиненным только с 1 устройства.

из ваших слов не получается... на каждом устройстве свои же куки, если именно нет слежения за сессией пользователя...

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
R
На сайте с 20.02.2015
Offline
59
#4

totamon, id сессии тоже пишется в куку PHPSESSID по умолчанию.

Насчет одного устройства это верно.. Угнал куку и авторизовался.

R
На сайте с 18.12.2009
Offline
92
#5
totamon:
из ваших слов не получается... на каждом устройстве свои же куки, если именно нет слежения за сессией пользователя...

нет, потому что после авторизации значение поля `hash` обновится и больше никто не авторизуется.

дани мапов
На сайте с 06.09.2012
Offline
204
#6

Чтобы под одним логином могли зайти несколько человек - таблицу использовать необязательно. И "hash" тут не влияет. Какая разница, скольким юзерам вы запишете в куку этот "hash".

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
R
На сайте с 20.02.2015
Offline
59
#7

rerighter не помешает также поле в БД с данными времени жизни куки типа `hash_expire` = time() * 3600 * дней

При запросе проверять `hash_expire` > time()

К примеру ситуация: пользователь аторизировался ему поставили куку на 10 дней жизни, он не выполнил выход. Угнали куку поставили ей время жизни бесконечное - выполнили вход.

Ситуаций конечно много можно моделировать :) Только я не понял какая у вас проблема...

totamon
На сайте с 12.05.2007
Offline
437
#8
rerighter:
нет, потому что после авторизации значение поля `hash` обновится и больше никто не авторизуется.

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

зачем вообще сессии? обычно при логине ставят галочку "запомнить", если да то кука ставится на долго, если нет то на время сеанса браузера - вышел со страницы кука стерлась...

rerighter:
Решить проблему можно, создав, например, таблицу `users_sessions` и хранить там данные сессий.

в чем проблема то?

R
На сайте с 18.12.2009
Offline
92
#9
totamon:
в чем проблема то?

Проблема в том, что кука у пользователя в браузере потерлась, если он ее почистил, а запись в базе, что он авторизован, осталась. Получается, копится мусор. Я и спрашиваю, как мусор то чистить этот на автомате? Наверное реально надо еще время создания в базу писать, длительность куки и хотя бы раз в день запускать крон задание, которое будет мусор чистить.

R
На сайте с 20.02.2015
Offline
59
#10

delete from `users` where `hash_expire` < time()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий