собственно, сабж.
Сейчас реализовал такую схему:
Пользователь вводит логин и пароль и жмет кнопку войти, тут же назначается куки с логином и хэшем пароля.
При повторном входе происходит проверка сначала того, нет ли такого логина и пароля в текущей сессии, и если нет, то проверяются куки. В случае, если куки найдены, пароль и логин берутся оттуда, проверяются на валидность и если все ок, пользователь автоматически входит в систему.
Чтобы куки удалились нужно нажать кнопку выйти. При этом логин и пароль пользователя удалятся из сессии.
Все бы хорошо, но мне нужно немного другое. При той схеме, что у меня есть сейчас, после выхода с сайта, пользователю необходимо опять вручную вводить свой логин и пароль, что не всегда удобно и хорошо. На многих сайтах, даже после выхода из системы, пароль и логин сохраняются в менеджере паролей браузера, и при нажатии Ctrl + Enter (в большинстве случаев), автоматически вводятся.
Как можно реализовать такой механизм?
п.с. В фаерфоксе они запоминаются без каких-либо телодвижений со стороны моей "cms"
но вот в опере и других браузерах этого не происходит.
Спустя 1 час, 31 минута, 22 секунды (18.07.2012 - 07:49) vagrand написал(а):
Цитата |
На многих сайтах, даже после выхода из системы, пароль и логин сохраняются в менеджере паролей браузера, и при нажатии Ctrl + Enter (в большинстве случаев), автоматически вводятся. |
Это функционал самого браузера, не надо поутать его с функционалом php.
Цитата |
Пользователь вводит логин и пароль и жмет кнопку войти, тут же назначается куки с логином и хэшем пароля. |
Очень и очень плохо хранить логин и пароль в куках, пусть даже и в виде хеша.
Спустя 36 минут, 9 секунд (18.07.2012 - 08:25) goodguy написал(а):
Цитата |
Это функционал самого браузера, не надо поутать его с функционалом php. |
Почему тогда на других сайтах запоминается, а на моем нет? Даже не всплывает запрос "сохранить данные или нет".
Может из-за того, что у меня данные формы отправляются не кнопкой, а через джаваскрипт?
Кнопка логина выглядит так:
<div class='GreyButton' id='LoginButton'>
<a href='javascript:document.login_form.submit();' class='grey-button pcb'>
<span>$login</span>
</a>
</div>
Цитата |
Очень и очень плохо хранить логин и пароль в куках, пусть даже и в виде хеша. |
Если это не хранить в куках, то на кой они тогда вообще нужны? (именно применительно к запоминанию пользователя)
Спустя 6 минут, 35 секунд (18.07.2012 - 08:32) Игорь_Vasinsky написал(а):
Цитата |
Если это не хранить в куках, то на кой они тогда вообще нужны? (именно применительно к запоминанию пользователя) |
в куках не хранят пароли, если есть галочка "запомнить" - то просто создаётся произвольная кука (например с id юзера) для нужного домена, по наличии которой, потом определяется - выводить форму авторизации или сразу авторизировать.
хотя можно рискнуть у и хранить хэш пароля (как и в БД) и логин, но это лишние телодвижения и есть риск что куки сопрут и начнут подбирать по словарю.
Спустя 6 минут, 41 секунда (18.07.2012 - 08:38) goodguy написал(а):
Цитата |
потом определяется - выводить форму авторизации или сразу авторизировать. |
Что-то я недопонимаю. А на основании чего будет авторизация происходить? Ну сохраню я id пользователя для домена, но потом же любой ламер сможет с таким же успехом стырить у кого-то куку, посмотреть какой там id, вставить его в свою куку и вуаля! Авторизоваться под чужим аккаунтом. Какой в этом смысл?
Цитата |
начнут подбирать по словарю. |
А разве не для этого существует такое понятие как "соль"? Что даст словарь, если у меня хэш составляется с применением мною придуманной "соли"?
п.с. основной вопрос по прежнему в силе
Спустя 17 минут, 20 секунд (18.07.2012 - 08:56) Игорь_Vasinsky написал(а):
если куки воруют у юзера - это головники юзера.
Цитата |
А разве не для этого существует такое понятие как "соль"? Что даст словарь, если у меня хэш составляется с применением мною придуманной "соли"? |
ну раз знаешь про соль - молодец.
Спустя 54 минуты, 54 секунды (18.07.2012 - 09:51) goodguy написал(а):
ок, с этим разобрались, но как быть с запоминанием пароля и логина браузером?
Джаваскрипт не есть гуд при отправке данных формы?
Джаваскрипт не есть гуд при отправке данных формы?
Спустя 16 минут, 52 секунды (18.07.2012 - 10:08) vagrand написал(а):
в куке надо хранить ид пользователя и авторизационный хеш, который будит уникальным для каждой авторизации пользователя. Так же очень хорошо добавить в него дату до которой он валиден
Спустя 12 минут, 29 секунд (18.07.2012 - 10:20) Quieteroks написал(а):
goodguy
vagrand сказал единственно верное решение.
В бьазе кроме хеша пароля и логина хранишь некий хеш для авторизации.
Хеш авторизации отправляется пользователю в куки.
А в скрипте проверяешь, имеется ли у пользователя куки с нуным тебе хешем и ищешь в базе по эту хешу. Если найден, то создаешь ему сессию на текущий момент. При каждом новом входе следует заново генерировать куки с хешем авторизации.
В браузере не стоит хранить пароли и логины. Пароли вообще кроме базы нигде не храни. В Сессии моэешь хранить информацию о пользователе. К примеру id и логин, id для обращения в базу к данным данного пользователя, к примеру при входе в личный кабинет, а логин для личного обращения к пользователю.
vagrand сказал единственно верное решение.
В бьазе кроме хеша пароля и логина хранишь некий хеш для авторизации.
Хеш авторизации отправляется пользователю в куки.
А в скрипте проверяешь, имеется ли у пользователя куки с нуным тебе хешем и ищешь в базе по эту хешу. Если найден, то создаешь ему сессию на текущий момент. При каждом новом входе следует заново генерировать куки с хешем авторизации.
В браузере не стоит хранить пароли и логины. Пароли вообще кроме базы нигде не храни. В Сессии моэешь хранить информацию о пользователе. К примеру id и логин, id для обращения в базу к данным данного пользователя, к примеру при входе в личный кабинет, а логин для личного обращения к пользователю.
Спустя 30 минут, 17 секунд (18.07.2012 - 10:50) goodguy написал(а):
Цитата |
А в скрипте проверяешь, имеется ли у пользователя куки с нуным тебе хешем и ищешь в базе по эту хешу. |
Ну, хэшированный пароль + соль уже нормально, не вижу необходимости генерировать еще какой-то хэш. Логин - не секретная информация, так что прятать смысла нет.
Но за саоветы спасибо.
С браузером разобрался. Изначально когда делал похоже нажал "никогда не сохранять пароли". Поменял домен для проверки, и все стало ок.