- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
На самописном движке таблица `users` содержит, например, `id` и `hash` значения, которых также у пользователя в куках после авторизации. Получается, что одновременно можно быть залогиненным только с 1 устройства.
Решить проблему можно, создав, например, таблицу `users_sessions` и хранить там данные сессий.
А вопрос такой - как удалять эти сессии? Если юзер произвел выход с сайта - сессия удалилась, все норм. А если не произвел?
Создал я куку на неделю. У юзера кука сама сдохла, а в базе сессия осталась. Так сессии плодятся и плодятся. Как автоматизировать их чистку в mysql? Кроном сравнивая время создания/жизни?
Или может решение нереально простое, но я не додумался.
Спасибо.
Хранить файлы сессий в папке отдельной, и периодически проверять её.
PHP разве не очищает автоматом устаревшие файлы сессий?
Маленько не до понял вашу проблему.. зачем создавать таблицу с данными сессий?
Есть для этого переменная $_SESSION, данные в ней умрут по истечению жизни сессии и файл сессии удалиться, если я не ошибаюсь.
Получается, что одновременно можно быть залогиненным только с 1 устройства.
из ваших слов не получается... на каждом устройстве свои же куки, если именно нет слежения за сессией пользователя...
totamon, id сессии тоже пишется в куку PHPSESSID по умолчанию.
Насчет одного устройства это верно.. Угнал куку и авторизовался.
из ваших слов не получается... на каждом устройстве свои же куки, если именно нет слежения за сессией пользователя...
нет, потому что после авторизации значение поля `hash` обновится и больше никто не авторизуется.
Чтобы под одним логином могли зайти несколько человек - таблицу использовать необязательно. И "hash" тут не влияет. Какая разница, скольким юзерам вы запишете в куку этот "hash".
rerighter не помешает также поле в БД с данными времени жизни куки типа `hash_expire` = time() * 3600 * дней
При запросе проверять `hash_expire` > time()
К примеру ситуация: пользователь аторизировался ему поставили куку на 10 дней жизни, он не выполнил выход. Угнали куку поставили ей время жизни бесконечное - выполнили вход.
Ситуаций конечно много можно моделировать :) Только я не понял какая у вас проблема...
нет, потому что после авторизации значение поля `hash` обновится и больше никто не авторизуется.
ну тогда да, одновременно не могут... но опять непонятка) что мешает авторизоваться на другом устройстве? hash обновится, и на первом разлогинится.
зачем вообще сессии? обычно при логине ставят галочку "запомнить", если да то кука ставится на долго, если нет то на время сеанса браузера - вышел со страницы кука стерлась...
Решить проблему можно, создав, например, таблицу `users_sessions` и хранить там данные сессий.
в чем проблема то?
в чем проблема то?
Проблема в том, что кука у пользователя в браузере потерлась, если он ее почистил, а запись в базе, что он авторизован, осталась. Получается, копится мусор. Я и спрашиваю, как мусор то чистить этот на автомате? Наверное реально надо еще время создания в базу писать, длительность куки и хотя бы раз в день запускать крон задание, которое будет мусор чистить.
delete from `users` where `hash_expire` < time()