Вы должны сохранить UUID, идентификатор пользователя и отметку времени в вашей базе данных:
- При входе в систему создайте UUID для текущего сеанса пользователя (
String::uuid();
) и сохраните UUID в сеансе пользователя, а также в файле cookie.
- Если у пользователей уже есть активный сеанс или файл cookie, прочитайте UUID оттуда.
- Пользователь теперь «действителен», если:
- Пользователь входит в систему, и запись в базе данных отсутствует. UUID не имеет значения.
- Пользователь входит в систему, и временная метка является "старой" (определите свое собственное значение ... 15 минут?). UUID не имеет значения.
- UUID пользователя и идентификатор пользователя соответствуют записи в базе данных, а отметка времени не является "старой".
- Пользователь теперь «недействителен», если в базе данных есть другой UUID и его временная метка не «старая».
- Если пользователь выходит из системы вручную, удалите запись базы данных. Если пользователь просто закрывает свой браузер, он может либо возобновить свой сеанс с помощью своего файла cookie, либо его сеанс (сеанс приложения, а не сеанс браузера) автоматически становится недействительным после того, как отметка времени становится «старой».
Недостаток: если пользователь хочет быстро переключить компьютер / браузер, он / она должен использовать функцию выхода из системы или дождаться установленного времени ожидания. Однако вы также можете реализовать механизм, который отключает текущего активного пользователя от коллизии сеансов и закрывает все активные процессы или все, что вы делаете в своем приложении:).