понедельник, 29 января 2018 г.

Автоматическая авторизация на сайте



Как-то я ползал по Интернету и искал информацию о том как сделать время жизни сессий вечным. Думал, что это будет оптимальным способом автоматической авторизации пользователей, которые уже когда-то побывали на сайте. И набрел я на холивары по этому поводу. Долго я их читал-изучал, но в сухом остатке, склонившись к одному из мнений, я решил что сессии не лучший способ для этого.
Вот такой алгоритм подходит куда лучше:
  1. Отправляем куку в браузер пользователя с каким-то уникальным ключом и долгим сроком жизни этой куки
  2. В базе сохранять md5 хеш этого ключа с привязкой к ID юзера
  3. Если приходит юзер с известным ключом в куках (совпадающим по хешу с тем, что есть в базе)
    Такого пользователя мы можем сразу авторизовать по ID
  4. Но надо всё же удалить текущую запись об этом пользователе из базы (имеется в виду хеш ключа с привязкой к ID, но, естественно, не саму учетную запись)
  5. Далее отправляем пользователю новую куку и новым уникальным ключом и делаем в запись в базу md5 хеш этого ключа с привязкой к ID юзера.
Собственно это всё. Перевести это на PHP не должно вызвать каких-либо проблем.
Сессии не подходят для этой операции, так как в идеале сессия должна жить до закрытия браузера пользователем.
Этот метод хорош тем, что даже если злоумышленник каким-либо образом получит куку из браузера настоящего пользователя, то он не сможет долго ей пользоваться. Хоть он и сможет на некоторое время получить доступ, но как только настоящий хозяин аккаунта войдет на сайт, не сможет авторизоваться автоматически и введет свои логин и пароль вручную, то запись в базу тут же обновится и злоумышленник тут  же потеряет доступ.

0 коммент.:

Отправить комментарий