Задать вопрос
@somebody09

Как лучше сделать функцию Запомнить меня?

Начал продумывать реализацию функции при входе на сайт Запомнить меня. Стал гуглить но ничего толкового кроме холиваров не нашел.
Вариант таков: куки, в которые пихается зашифрованная строка с чем то (логин и пароль или uniqid какой то, etc...), эта же строка пихается в БД при заходе сверяется и если ок то пропускаем. Что тогда лучше хранить в куке? Как тогда быть если мы запоминаем свой логин с разных компов, устройств? А также это не безопасно, ведь куку могут своровать и вставить себе после чего войти.
Еще через куки + сессию вариант но не пойму каким образом и чем он лучше.
Знаю что идеального метода нету и панацеи от всех проблем тоже и что есть SSL, но все же, хотелось увидеть мнение может кто поделится способом как он это делал/делает.
Код не интересует, важно понять какой способ реализации и почему он лучше.
  • Вопрос задан
  • 6350 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Driver86
@Driver86
Немодератор toster.ru
Куку могут своровать. И пароль могут своровать.
При регистрации пользователя генерируем ему уникальную строку и сохраняем в БД. После запоминания ставим её в куках. Для защиты от кражи кук можно привязывать строку к IP, но не всем пользователям это подойдёт
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
В куки - храним токен, токен - может быть привязан к IP, подсети провайдера, браузеру (User-Agent), разрешению экрана.
При использовании токена с несовпадающими параметрами - токен устанавливается невалидным на сервере и пользователю предлагается снова ввести логин и пароль.

Схема последовательности авторизации: token -> login/pass
Схема линковки на сервере:
userID/login:token1:md5(ip:subnet:user-agent:screen-size):salt1:timestamp1
userID/login:token2:md5(ip:subnet:user-agent:screen-size):salt2:timestamp2
..........
userID/login:tokenN:md5(ip:subnet:user-agent:screen-size):saltN:timestampN
PS: то, что не хотим учитывать в md5-хеше - ставим пустой строкой.

Один токен = одно устройство = один браузер.
Генерация токена: token=hash(md5(...).saltN)
(можно ещё добавить время создания)

БОНУС!
Ответ написан
@MadridianFox
Web-программист, многостаночник
Привязка текущей сессии с браузеру в PHP происходит как раз через куки. Т.е. это механизм, который по умолчанию используется на миллионах сайтов.
Да, он не идеален. Любой, кто сможет перехватить то что браузер пользователя отправляет серверу, может взять эту куку, вставить себе и зайти на сайт от лица того пользователя.
Спасает https, который шифрует передаваемые данные.

все эти "запомнить меня" просто вешают куку. В ней обычно токен - просто уникальная строка для пользователя. Т.е. ни логин ни пароль, именно что случайная уникальная строка.
Когда сервер видит токен, он без вопросов аутентифицирует пользователя.
Так работают и различные api соцсетей и различных сервисов. Никто не боится что кто-то может перехватить токен, ибо во-первых https, а во-вторых, если таки могут перехватить, то что ни передавай - всё перехватят. А не передавать вовсе невозможно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы