Убить повторяющиеся сеансы на сервере в Laravel 5.2

О чем это?

Драйвер сеанса базы данных теперь включает user_id и ip_address, поэтому вы можете легко очистить все сеансы для данного пользователя.

В чем проблема

Я проверял эту статью, когда читаем, что нового в Laravel 5.2

Есть ли какой-либо блог, в котором четко объясняется, как выйти из дублирующих сеансов, созданных с использованием нескольких IP-адресов или через один и тот же IP-адрес с использованием нескольких браузеров?


person Pankaj    schedule 31.12.2015    source источник


Ответы (1)


Насколько я вижу, в этом нет никаких сложностей.

Пример данных в этой таблице выглядит следующим образом:

Данные таблицы сеансов

Итак, у вас есть user_id, браузер и временная метка последней активности. Итак, если вы хотите, теперь вы можете добавить в cron, например, следующий запрос:

select user_id, count(*) AS `total` FROM sessions GROUP by user_id HAVING count(*) > 1

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

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

ИЗМЕНИТЬ

Имейте в виду, что по умолчанию таблица sessions отсутствует (поскольку многие пользователи не будут использовать драйвер database для сеансов). Чтобы создать эту таблицу, вам нужно запустить:

 php artisan session:table

Приведенная выше команда создаст миграцию сеансов.

а потом надо бежать

 php artisan migrate

чтобы применить эту миграцию к базе данных

person Marcin Nabiałek    schedule 31.12.2015
comment
@Helper Возможно, вам не следует. В таблице users будет UserID, а здесь будет user_id - person Marcin Nabiałek; 01.01.2016
comment
Я предполагаю, что вы установили свой .env файл SESSION_DRIVER=database (по умолчанию это SESSION_DRIVER=file) - person Marcin Nabiałek; 01.01.2016
comment
Если мне нужно удалить те записи, которые не принадлежат текущему вошедшему в систему пользователю, то как я это узнаю? Я имел в виду, допустим, user_id встречался 2 раза, тогда как я узнаю, какой из них мне придется удалить. Причина, по которой я задал этот вопрос, заключается в том, что существует вероятность того, что кто-то попытается войти в систему с той же учетной записью с помощью кода для удаления веб-страниц... поэтому может быть много записей для одного и того же пользователя. - person Pankaj; 01.01.2016
comment
Как я уже сказал, при запуске cron запроса, который я показал, а затем для набора результатов вы можете делать все, что хотите - этот запрос будет получать записи для всех пользователей (а не для текущего, потому что в cron не будет ни одного зарегистрированного пользователя) - person Marcin Nabiałek; 01.01.2016
comment
Могу ли я избежать создания повторяющихся записей сеансов пользователей в таблице сеансов? Есть ли какой-либо флаг, который делает это в файле конфигурации сеанса? - person Pankaj; 16.08.2016