Ограничить множественный вход в CakePhp - PullRequest
1 голос
/ 15 сентября 2011

У меня есть миссия по ограничению множественного входа на сайт (например, вход с разных компьютеров под одним и тем же именем пользователя).Мой PM хочет сделать это с сохранением идентификатора сессии.Как я могу это сделать?У меня есть идея, чтобы сохранить флаг в базе данных после входа в систему, и снять отметку после unlogin .. но если браузер внезапно или случайно закрыт, он не может быть помечен.Помогите мне, пожалуйста

1 Ответ

1 голос
/ 16 сентября 2011

Вы должны сохранить UUID, идентификатор пользователя и отметку времени в вашей базе данных:

  1. При входе в систему создайте UUID для текущего сеанса пользователя (String::uuid();) и сохраните UUID в сеансе пользователя, а также в файле cookie.
  2. Если у пользователей уже есть активный сеанс или файл cookie, прочитайте UUID оттуда.
  3. Пользователь теперь «действителен», если:
    • Пользователь входит в систему, и запись в базе данных отсутствует. UUID не имеет значения.
    • Пользователь входит в систему, и временная метка является "старой" (определите свое собственное значение ... 15 минут?). UUID не имеет значения.
    • UUID пользователя и идентификатор пользователя соответствуют записи в базе данных, а отметка времени не является "старой".
  4. Пользователь теперь «недействителен», если в базе данных есть другой UUID и его временная метка не «старая».
  5. Если пользователь выходит из системы вручную, удалите запись базы данных. Если пользователь просто закрывает свой браузер, он может либо возобновить свой сеанс с помощью своего файла cookie, либо его сеанс (сеанс приложения, а не сеанс браузера) автоматически становится недействительным после того, как отметка времени становится «старой».

Недостаток: если пользователь хочет быстро переключить компьютер / браузер, он / она должен использовать функцию выхода из системы или дождаться установленного времени ожидания. Однако вы также можете реализовать механизм, который отключает текущего активного пользователя от коллизии сеансов и закрывает все активные процессы или все, что вы делаете в своем приложении:).

...