Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Авторизация на PHP

Ответить
Настройки темы
Авторизация на PHP

Старожил


Сообщения: 155
Благодарности: 2


Конфигурация

Профиль | Отправить PM | Цитировать


Дома установлен Denver, на котором скрипт авторизации работает, и работает отлично; заливаю к хостеру - не работает! Логин и пароль хранятся в файле "passw": на одной строке - одна пара. Вместо функции "strcmp" использовалось обычное сравнение "==" - ничего не изменяется. Переменная "auth", регистрируемая в сессии, нужна для проверки в защищенном файле.
Где искать ошибку?

PHP код: Выделить весь код

<?

if(!isset($PHP_AUTH_USER))
{
  
Header("WWW-Authenticate: Basic realm=\"Private\"");
  
Header("HTTP/1.0 401 Unauthorized");
  echo 
"<p>Авторизация отменена пользователем!</p>";
  exit;
}
else
{
  
// Сравниваем введенные значения с парой логин-пароль из файла с паролями
  
session_start();
  
session_register("auth");
  
$auth 0;
  foreach(
file("passw/passw") as $k)
  {
    if(
strcmp(substr($k,0,-2), "$PHP_AUTH_USER $PHP_AUTH_PW") == 0)
      
$auth 1;
  }
  if(
$auth != 1)
  {
    
Header("WWW-Authenticate: Basic realm=\"Private\"");
    echo 
"<p>Неверный логин или пароль!</p>";
    
session_unregister("auth");
  }
  else  
// Авторизация прошла успешно
  
{
    
Header("Location: edit.php");
  }
}
?>


Отправлено: 13:15, 24-02-2007

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Qwe1
А почему не работает? Какие ошибки выдаются??

-------
Fortes fortuna adiuvat


Отправлено: 13:25, 24-02-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 155
Благодарности: 2

Профиль | Отправить PM | Цитировать


Окно с вводом логина и пароля появляется, но обработка и анализ введенных значений и просто нажатий на кнопки не верна:
1) Если ввести правильные Л/П, то они не подходят и опять выдается окно с вводом. Так продолжается 3 раза в IE и бесконечно раз в FF и Opere.
2) Если ввести неправильные Л/П или оставить пустыми - всё тоже самое.
3) Если ввести сначала верные Л/П, нажать ОК (опять появится окно с вводом), потом неверные и нажать ОК - все проходит!
4) Если нажать Отмена, то в IE - "Авторизация отменена пользователем!" - то есть так и должно быть, в FF и Opere - "Неверный логин или пароль!" - непонятно, почему.

Главное, конечно же, это то, что скрипт (или еще что-то) не воспринимает верные логин и пароль с первого раза. Дома же все работает и все браузеры одинаково ведут себя (кроме 3-х раз IE).

Отправлено: 13:49, 24-02-2007 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата:
foreach(file("passw/passw") as $k)
Вы уверены, что на хочтинге у Вас читается файл?? Может доступ к файлу не установлен, соответственно он не читается и поэтому не могут правильные логин и пароль из файла прочитаться

-------
Fortes fortuna adiuvat


Отправлено: 14:22, 24-02-2007 | #4


Старожил


Сообщения: 155
Благодарности: 2

Профиль | Отправить PM | Цитировать


Да, проверял!
PHP код: Выделить весь код

$a=file("passw/passw");

echo 
$a[0]; 

Ам может это дело в substr($k,0,-2)? У меня дома Windows, значит 2 символа конца строки, а у хостера Linux - значит 1 символ?

Отправлено: 14:31, 24-02-2007 | #5


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Qwe1
Цитата:
Ам может это дело в substr($k,0,-2)? У меня дома Windows, значит 2 символа конца строки, а у хостера Linux - значит 1 символ?
Попробуйте использовать trim()

-------
Fortes fortuna adiuvat


Отправлено: 14:51, 24-02-2007 | #6


Старожил


Сообщения: 155
Благодарности: 2

Профиль | Отправить PM | Цитировать


- Я изменил substr($k,0,-1) - стало работать (у хостера, дома - нет). Смущает только то, что и при 2-х символах тоже работало, хоть и не с первого раза.
- трим проверил - тоже работает. Пожалуй, это "кроссплатформенный" способ - работает и там и там!

Но обнаружил еще один момент: в защищенном файле в самом начале я вставил следующий код:
PHP код: Выделить весь код

<?

session_start
();
if((
session_is_registered("auth") == false) && (@$auth != 1))
{
  echo 
"<a href=\"editnews.php\" target=\"_top\">Необходима авторизация!</a>";
  exit;
}
?>

Дальше идет форма и другой HTML-код. Переменная  "auth" больше нигде не участвует.

Дома: если ввести адрес этой страницы через браузер, сработает "защита", перенаправляющая на файл с авторизацией (то есть на файл из первого поста). Если зайти через файл авторизации - все ок.
У хостера: через браузер - тоже самое, а вот через страницу авторизации - не совсем. Авторизация проходит, перенаправление на защищенную страницу тоже, но при нажатии на кнопку отправить формы (action которой ведет на эту же (защищенную) страницу!) опять требуется авторизация, то есть код проверки переменной auth уже не проходит (словно мы зашли через браузер). Если ввести Л/П, то все ок. Получается - как бы 2 авторизации!

Отправлено: 15:45, 24-02-2007 | #7


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Qwe1
Попробуйте инклудить код из вашего первого поста в начало каждого защищённого файла - вроде это так делается
То есть без редиректов всяких, просто инклуд.
Тогда и в сессию ничего писать не надо

Отправлено: 16:12, 24-02-2007 | #8


Старожил


Сообщения: 155
Благодарности: 2

Профиль | Отправить PM | Цитировать


То есть переменные $PHP_AUTH_USER и $PHP_AUTH_PW хранятся также как и сессионные - до закрытия окна или явного уничтожения?

Отправлено: 16:44, 24-02-2007 | #9


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Qwe1
По идее да, браузер их хранит. Эти заголовки обрабатыват же браузер

-------
Fortes fortuna adiuvat


Отправлено: 17:30, 24-02-2007 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Авторизация на PHP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Проблема с PHP(не передаются переменные из формы в PHP- скрипт) Kirander Вебмастеру 21 03-08-2009 01:11
Авторизация средствами PHP vov4ik08 Вебмастеру 8 23-07-2009 18:16
C/C++ - [решено] PHP. Fatal error: Function name must be a string in /var/www/index.php on line 15 Artem-Samsung Программирование и базы данных 6 29-11-2008 18:37
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php v0f41k Вебмастеру 4 11-05-2008 22:08
Авторизация..... Maxximus О сайте и форуме 7 03-06-2002 22:48




 
Переход