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

Компьютерный форум 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

 

Старожил


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

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


При моей авторизации проверка пароля осуществляется один раз, а потом проверяется лишь "флажок" - авторизация пройдена. Если вставлять код из первого поста везде, где надо авторизироваться, то каждый раз будет осуществляться проверка, что связано со считыванием файла и перебором (или выборкой из БД). Если паролей мало, то это еще терпимо, если много - то лишняя трата времени и ресурсов. Но в любом случае, лучше стремиться к оптимальному алгоритму авторизации...

Отправлено: 18:02, 24-02-2007 | #11



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

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


Аватара для vadimiron

Ветеран


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

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


Qwe1
Да, но файл, который должен быть защищён пока только один, а если их много появится?? Тогда будете копировать страницу авторизации для каждого файла?

-------
Fortes fortuna adiuvat


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


Старожил


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

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


vadimiron
Зачем? В каждый защищенный файл вставляется проверка "флажка": см. пост 7!

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


Аватара для vadimiron

Ветеран


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

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


Цитата:
Header("Location: edit.php");
Но из авторизации идёт прямое перенаправление на защищённый файл!!!
как вы переправите на другой защищённый файл?? можно конечно параметрами передовать, но данный метод авторизации используют в основном так как я сказал.

-------
Fortes fortuna adiuvat


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


Аватара для vadimiron

Ветеран


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

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


И кстати файл в одном случае называется edit.php, в другом - editnews.php
Ещё раз перепроверьте весь код и в крайнем случае здесь киньте

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


Старожил


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

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


Да-да, все верно - буду инклюдить! Только не понятно - как без сессий-то обойтись?

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

<?

require "auth.inc";
if((
session_is_registered("auth") == false) || (@$auth != 1))
{
  unset(
$PHP_AUTH_USER); // не работает
  
Header("HTTP/1.0 401 Unauthorized"); // вместо этого можно сделать редирект на $_SERVER['HTTP_REFERER']
  
exit;
}
<...>
?>

Содержимое файла "auth.inc":
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(
trim($k) == "$PHP_AUTH_USER $PHP_AUTH_PW")
      
$auth 1;
  }
}
?>

1) Теперь правильно?
2) Хочу сделать так, чтобы после неверного ввода Л/П можно было бы опять вводить Л/П - но unset($PHP_AUTH_USER); не помогает...

Отправлено: 00:27, 25-02-2007 | #16


Аватара для vadimiron

Ветеран


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

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


Не, проверка $auth в защищённом файле вообще не нужна, всю логику авторизации должен выполнять auth.inc

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

if(!isset($PHP_AUTH_USER))

// пользователь неизвестен
{
    
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
    
Header("HTTP/1.0 401 Unauthorized");
               exit(
"Вы либо неправильно вводите Ваши имя и пароль, которые задали при регистрации,  либо ещё не зарегистрированы.<br>Зарегестрироваться можно прямо <a href='reg_user.php'>здесь</a>");
}
else 
// пользователь известен, неизвестен пароль
{
    
    
$auth=0;
    
// просмотр файла 
    
foreach(file("passw/passw") as $k
   { 
        if(
trim($k) == "$PHP_AUTH_USER $PHP_AUTH_PW")  
        {
                
$auth 1
                break;
         }
   } 

    if (
$auth!=1)
    {
        
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
    
Header("HTTP/1.0 401 Unauthorized");
                exit(
"Вы либо неправильно вводите Ваши имя и пароль, которые задали при регистрации,
            либо ещё не зарегистрированы.<br>Зарегестрироваться можно прямо <a href='reg_user.php'>здесь</a>"
);
       
    }



B всё - сам файл будет исполнятся, если была произведена авторизация, если же, будет срабатывать exit

Отправлено: 00:57, 25-02-2007 | #17


Старожил


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

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


А, ну да, точно! Спасибо!

Но, все же, постоянная проверка логина и пароля, вместо "флажка", пожалуй, не очень хорошо!?

Последний раз редактировалось Qwe1, 25-02-2007 в 12:56.


Отправлено: 01:46, 25-02-2007 | #18



Компьютерный форум 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




 
Переход