Авторизация на PHP
Дома установлен Denver, на котором скрипт авторизации работает, и работает отлично; заливаю к хостеру - не работает! Логин и пароль хранятся в файле "passw": на одной строке - одна пара. Вместо функции "strcmp" использовалось обычное сравнение "==" - ничего не изменяется. Переменная "auth", регистрируемая в сессии, нужна для проверки в защищенном файле.
Где искать ошибку? PHP код:
|
Qwe1
А почему не работает? Какие ошибки выдаются?? |
Окно с вводом логина и пароля появляется, но обработка и анализ введенных значений и просто нажатий на кнопки не верна:
1) Если ввести правильные Л/П, то они не подходят и опять выдается окно с вводом. Так продолжается 3 раза в IE и бесконечно раз в FF и Opere. 2) Если ввести неправильные Л/П или оставить пустыми - всё тоже самое. 3) Если ввести сначала верные Л/П, нажать ОК (опять появится окно с вводом), потом неверные и нажать ОК - все проходит! 4) Если нажать Отмена, то в IE - "Авторизация отменена пользователем!" - то есть так и должно быть, в FF и Opere - "Неверный логин или пароль!" - непонятно, почему. Главное, конечно же, это то, что скрипт (или еще что-то) не воспринимает верные логин и пароль с первого раза. Дома же все работает и все браузеры одинаково ведут себя (кроме 3-х раз IE). |
Цитата:
|
Да, проверял!
PHP код:
|
Qwe1
Цитата:
|
- Я изменил substr($k,0,-1) - стало работать (у хостера, дома - нет). Смущает только то, что и при 2-х символах тоже работало, хоть и не с первого раза.
- трим проверил - тоже работает. Пожалуй, это "кроссплатформенный" способ - работает и там и там! Но обнаружил еще один момент: в защищенном файле в самом начале я вставил следующий код: PHP код:
У хостера: через браузер - тоже самое, а вот через страницу авторизации - не совсем. Авторизация проходит, перенаправление на защищенную страницу тоже, но при нажатии на кнопку отправить формы (action которой ведет на эту же (защищенную) страницу!) опять требуется авторизация, то есть код проверки переменной auth уже не проходит (словно мы зашли через браузер). Если ввести Л/П, то все ок. Получается - как бы 2 авторизации! |
Qwe1
Попробуйте инклудить код из вашего первого поста в начало каждого защищённого файла - вроде это так делается То есть без редиректов всяких, просто инклуд. Тогда и в сессию ничего писать не надо |
То есть переменные $PHP_AUTH_USER и $PHP_AUTH_PW хранятся также как и сессионные - до закрытия окна или явного уничтожения?
|
Qwe1
По идее да, браузер их хранит. Эти заголовки обрабатыват же браузер |
При моей авторизации проверка пароля осуществляется один раз, а потом проверяется лишь "флажок" - авторизация пройдена. Если вставлять код из первого поста везде, где надо авторизироваться, то каждый раз будет осуществляться проверка, что связано со считыванием файла и перебором (или выборкой из БД). Если паролей мало, то это еще терпимо, если много - то лишняя трата времени и ресурсов. Но в любом случае, лучше стремиться к оптимальному алгоритму авторизации...
|
Qwe1
Да, но файл, который должен быть защищён пока только один, а если их много появится?? Тогда будете копировать страницу авторизации для каждого файла? |
vadimiron
Зачем? В каждый защищенный файл вставляется проверка "флажка": см. пост 7! |
Цитата:
как вы переправите на другой защищённый файл?? можно конечно параметрами передовать, но данный метод авторизации используют в основном так как я сказал. |
И кстати файл в одном случае называется edit.php, в другом - editnews.php
Ещё раз перепроверьте весь код и в крайнем случае здесь киньте |
Да-да, все верно - буду инклюдить! Только не понятно - как без сессий-то обойтись?
Я делаю так: в самое начало файла, который должен быть защищен, вставляю код: PHP код:
PHP код:
2) Хочу сделать так, чтобы после неверного ввода Л/П можно было бы опять вводить Л/П - но unset($PHP_AUTH_USER); не помогает... |
Не, проверка $auth в защищённом файле вообще не нужна, всю логику авторизации должен выполнять auth.inc
PHP код:
|
А, ну да, точно! Спасибо!
Но, все же, постоянная проверка логина и пароля, вместо "флажка", пожалуй, не очень хорошо!? |
Время: 05:11. |
Время: 05:11.
© OSzone.net 2001-