Помогите разобраться. Итак, у нас есть суперглобальные массивы : $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION Допустим я зашел на сайт, под логином и паролем. Они у меня лежат в сессии и в куках. В куках, чтобы после переоткрытия браузера, данные сели в сессии и выполнить автоматический вход. На этом же сайте я делаю ajax-запрос на какой-то ххх.php скрипт. Я так понял, что браузер отправляет все свои куки(в том числе PHPSESSID) при ajax-запросах, и на xxx.php мы имеем доступ к суперглобальным массивам $_SESSION и $_COOKIE. Почему же тогда все остальные массивы тоже носят имя суперглобальных, если только $_SESSION и $_COOKIE могут быть доступны из разных скриптов?
Суперглобальные - потому что не ты их объявляешь, а PHP. $_SESSION и $_COOKIE также создаются в момент запуска скрипта, на основе данных, переданных серверу, так что это только видимость, что они "доступны из разных скриптов", просто они заполняются информацией, которая где-то между запусками хранится (в случае с сессиями - на харде сервера, в случае с куками - на харде у юзера)
логин с паролем? логин должен лежать в бд, а пароль даже там не должен лежать вообще. Пароль нигде не сохраняется. В этом соль.
В БД я храню хэш пароля. В куках тоже храню хэш пароля. Логин хранится как есть. Так не правильно? А если не правильно, то как нужно?
Клиенту передается только идентификатор сессии. Чем они тебе не суперглобальные, если доступны из всех областях видимости. И не путай скрипты клиента и сервера.
зачем? с какой целью? где? для чего? нужно учиться ставить задачи, и тогда в их границах будет легко найти решение --- Добавлено --- если оно вообще есть
Юзер регится. Хэш пароля и логин я храню в БД. Юзер заходит на сайт. В сессии храню хэш пароля и логин, первым делом сравниваю их с хэшом и паролем из БД. Если равны, юзер заходит. Если не равны, то достаю хэш пароля и логин из кук и сравниваю их с БДэшными. Если равны, то юзер заходит, а в сессию записываю хэш пароля и логин. В куках храню хэш пароля и логин, чтобы выполнить автоматический вход, при переоткрытии браузера. Таким образом я решил для себя две задачи : автоматический вход на сайт после переоткрытия браузера аутентификация пользователя на сайте Так не правильно? А как правильно?
@SpikePHP, не надо хранить даже хэш пароля. Хватает хранить инфу, что пользователь проходил аутентификацию.
Это относится к сессии? Но один раз его нужно аутентифицировать с помощью хэша пароля и логина, а потом уже хранить инфу, что он проходил аутентификацию?
@SpikePHP, в общем случае пишешь в сессию id пользователя, если он туда записан - юзер авторизирован, если нет - не авторизирован. В куке светить свою внутреннюю кухню вообще не нужно. Если нужна галка "запомнить меня", туда токен пишется случайный, а не логин или пароль или что-то ещё. И, естественно, этот же токен пишется куда-нибудь в базу
@mkramer твой ответ расставил все точки над i. Теперь всё ясно. Спасибо тебе и сообществу! P.s. что можно зашифровать в токене кроме User-agent'a ?
Не надо в нём ничего шифровать. Просто случайный набор символов. Если нужно одновременно на нескольких машинах, то просто хранишь по нескольку токенов для пользователя, т.е. доп. таблица Код (Text): user_id | token Если нужно всех разаворизовать, то удаляешь просто из этой таблицы. Вот защита от угона сессии - это уже сложнее, там много подходов, но все не идеальны
Я подумал, что для усиления безопасности, было бы неплохо привязать как-то токен к браузеру или к клиенту