Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Скрипт авторизации


Автор: AtomoS 30.8.2009, 16:45
Очень полезный скрипт для начинающих:

Код

<?

  $admin_user = "admin";
  $admin_pass = "password";

  
  // Если пользователь не авторизовался - авторизуемся
  if(!isset($_SERVER['PHP_AUTH_USER'])) 
  { 
    Header("WWW-Authenticate: Basic realm=\"Restricted Area\""); 
    Header("HTTP/1.0 401 Unauthorized"); 
    exit(); 
  } 
  else 
  { 
    // Утюжим переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'],
    // Чтобы мышь не проскочила
    if (!get_magic_quotes_gpc())
    {
      $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
      $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
    }
    
    $p_user = $_SERVER['PHP_AUTH_USER']; 

    // Если такого пользователя нет - выдаём окно
    if($p_user != $admin_user)
    {
      Header("WWW-Authenticate: Basic realm=\"Restricted Area\""); 
      Header("HTTP/1.0 401 Unauthorized"); 
      exit(); 
    }
    // Если все проверки пройдены, сравниваем пароли
    $p_pass = $_SERVER['PHP_AUTH_PW'];
    if($_SERVER['PHP_AUTH_PW'] != $admin_pass)
    {
      Header("WWW-Authenticate: Basic realm=\"Restricted Area\""); 
      Header("HTTP/1.0 401 Unauthorized"); 
      exit(); 
    }
  }
?>


И собственно вопросик:

Можно чтобы когда в бразузере вводишь &act=exit, то авторизация сбрасывалась и нас бы пеерекидывало на index.php?

Автор: Ипатьев 30.8.2009, 17:06
Не знаю, как насчет полезного, но я вижу здесь очень много бесполезного.
Что это только три раза написано Header("WWW-Authenticate...?
Чего бы эту замечательную конструкцию не написать раз 15?
И что за странные мыши, которые куда-то скачут?

Я бы сказал, что этот код скорее вреден. полным непониманием написаного.

по поводу сброса авторизации можно почитать в документации.





Автор: SneG0K 30.8.2009, 18:44
AtomoS, ацтой. Где работа с БД, где куки, где сессии, где права доступа?

Автор: Ипатьев 30.8.2009, 21:17
Ну, скажем прямо, не всегда требуются при авторизации куки, сессии и права доступа. 
А HTTP авторизация хороша тем, что делается в две строчки. Зачем автор скрипт растянул его в 20 раз больше - это уже другой вопрос.

Автор: SneG0K 30.8.2009, 21:23
Ипатьев, это не эстетично. Хотя в некоторых случаях, так интересней выглядит)

Автор: Ипатьев 31.8.2009, 00:12
Ну, эстетичность - это вопрос вкуса. 
Если же говорить об объективных вещах, то плюсами http авторизации являются простота Basic и защищенность Digest (поддерживаемой нативно с 5.1) вариантов.
минусом является все сокращающееся количество установок РНР как модуля апача. да и сам ого апача. 

Автор: AtomoS 31.8.2009, 00:19
Я понимаю что знаний у вас придостаточно... но можно увидеть ли упрощённую версию скрипта?

Автор: MoLeX 31.8.2009, 06:03
AtomoS, врядли тебе его предоставит

Автор: fesor 31.8.2009, 07:15
Больше нравится смотреть на код в документации.
http://us3.php.net/manual/en/features.http-auth.php

Автор: Ипатьев 31.8.2009, 07:35
AtomoS, прЕдостаточно. превосходная степень, а не близость к достаточности. 
Дело не в количестве строк. Упрощенная так и останется заклинанием, без понимания смысла написанного. 
Я в своем сообщении написал, в какую сторону думать. Если идей нет - то и не стоит переживать.
Ценность (в данном случае) представлять будет только та упрощенная версия, которую написал сам, размышляя над каждой строчкой. 
А с точки зрения просто работы - и этот сойдет. 
Какой смысл сокращать этот код, если весь остальной на сайте - точно такой же?




Автор: AtomoS 31.8.2009, 10:40
Цитата(AtomoS @ 30.8.2009,  16:45)
И собственно вопросик:

Можно чтобы когда в бразузере вводишь &act=exit, то авторизация сбрасывалась и нас бы пеерекидывало на index.php?

Можно хотябы на этот вопрос ответить?)

Автор: Ипатьев 31.8.2009, 10:52
Можно, а смысл?
Ответ уже дали, он есть по ссылке, которую дал fesor. Прямо готовый код. Но кто бы ее еще увидел.

Автор: bars80080 31.8.2009, 14:19
там это довольно размазано


Цитата(AtomoS @  31.8.2009,  10:40 Найти цитируемый пост)
Можно чтобы когда в бразузере вводишь &act=exit, то авторизация сбрасывалась и нас бы пеерекидывало на index.php?

Код

if(!empty($_GET['act']) && $_GET['act'] == 'exit') {
    unset($_SESSION);
    session_destroyed();
    header('Location: http://server.ru/index.php');
    exit;
}

Автор: Ипатьев 31.8.2009, 14:47
это там не размазано. этого там вообще нет smile

Автор: IZ@TOP 31.8.2009, 15:05
Солнечные бури или погода такая?

bars80080, при чем тут сессии и HTTP Basic авторизация?

Автор: NewDima 31.8.2009, 17:20
Да, почитал... Иногда меня пугает, то что говорят у нас на форуме, ничего по делу
AtomoS, авторизация устроенная только на http basic не сбрасывается на сервере. Причина в том, что когда пользователь один раз ввел имя и пароль, броузер запоминает и отправляет их тебе. В данном случае единственное решение отключение броузера, что естественно тебе не под силу. Для полноценной авторизации придется сочитать с механизмом php-сессии, или чем-либо другим удобным.
P.S. AtomoS, судя по тому что ты пишешь и по комментам у тебя в коде, думается что ты где-то выложить это решил в качестве обучающего пособия, где-то в инете. Разочарую тебя, рано еще учить тебе, если это так

Автор: bars80080 31.8.2009, 17:24
Цитата(Ипатьев @  31.8.2009,  14:47 Найти цитируемый пост)
это там не размазано. этого там вообще нет 

Цитата(IZ@TOP @  31.8.2009,  15:05 Найти цитируемый пост)
при чем тут сессии и HTTP Basic авторизация? 

мдя. как-то в самом вопросе этого не было, потому и прошляпил

Автор: Ипатьев 31.8.2009, 17:27
NewDima, странно, а в документации другое пишут

Автор: NewDima 31.8.2009, 17:43
Ипатьев, покажи

Добавлено через 7 минут и 38 секунд
Если ты об этом
Цитата

Both Netscape Navigator and Internet Explorer will clear the local browser window's authentication cache for the realm upon receiving a server response of 401

то скажу, что во-первых не у всех пользователей IE и NN, а во вторых, у меня в NN это не работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)