За последние 24 часа нас посетили 16718 программистов и 1644 робота. Сейчас ищут 987 программистов ...

http-авторизация и _SERVER['PHP_AUTH_USER']

Тема в разделе "PHP для новичков", создана пользователем ShamahN, 11 янв 2009.

  1. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Помогайте. Как убить этот ключ? Делаю уже unset($_SERVER['PHP_AUTH_USER']) - он все равно жив. Чем мешает - если разок залогинелся - вышел, второй раз начинаешь логинится, получается что ты уже залогинен :) надеюсь понятно выразился (пиво играет :)
     
  2. gyrus

    gyrus Активный пользователь

    С нами с:
    11 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    проверь print_r($GLOBALS);
    возможно она дублируется как глобальная... не факт конечно)
    если так, то запускай еще и unset($GLOBALS['PHP_AUTH_USER']);

    > пиво играет
    пиво в умеренном количестве помогает рождать идеи, иногда очень да же стоящие;)
     
  3. нужно 401 послать. И все.
     
  4. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    флоппик
    Подробнее можно? Заголовок после логаута?
     
  5. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Дурь уже полная
    PHP:
    1. <?php
    2.   public static function logout()
    3.   {
    4.     if (isset($_SESSION['user'])) unset($_SESSION['user']);
    5.     unset($_GET['login']);
    6.     unset($_SERVER['PHP_AUTH_USER']);
    7.     unset($_SERVER['PHP_AUTH_PW']);
    8.     header('HTTP/1.0 401 Unauthorized');
    9.     return;
    10.   }
    11.  
    12. public static function login()
    13.   {
    14.     if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    15.       $user_pass = md5(SALT.$_SERVER['PHP_AUTH_PW']);
    16.       $mysqli = new mysql();
    17.       $query = "..";
    18.       if($result = $mysqli->query($query)) {
    19.         if ($result->num_rows) {
    20.           $_SESSION['user'] = $result->fetch_object();
    21.           unset($_GET['login']);
    22.         } else {
    23.           if (isset($_SESSION['user'])) unset($_SESSION['user']);
    24.           trigger_error("/login/error".$mysqli->error,E_USER_ERROR);
    25.         }
    26.       } else trigger_error("/crit_error{&&}Ошибка в запросе: ".$mysqli->error,E_USER_ERROR);
    27.     }
    28.    
    29.     if (!self::loged()) {
    30.       header("WWW-Authenticate: Basic realm='Administrating'");
    31.       header('HTTP/1.0 401 Unauthorized');
    32.       trigger_error("/login/fail",E_USER_ERROR);
    33.     }
    34.   }
    35.  
    Что не так? Делаю логаут, потом логин и он меня не спрашивает имя и пасс...т.к. $_SERVER['PHP_AUTH_USER'] заданы
     
  6. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    пусть дублируется :)
     
  7. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Странно... проблема решается закрытием бровзера.... Наверное надо спать...
     
  8. gyrus

    gyrus Активный пользователь

    С нами с:
    11 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    м.б. дело в сессии?
     
  9. alBoo

    alBoo Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    63
    Симпатии:
    0
    низя убить $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] из-за соображений безопасности. Браузер их переписывает только на запрос пользователя (в окне авторизации)
    Делай доп. переменную в сессии и проверяй сначала ее. Если есть значение - проверяеш PHP_AUTH и если не верно, то выдавать авторизацию, если нет - сразу выкидываеш на авторизацию.
    при логоуте чистий сессию
     
  10. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    alBoo - согласен ... только причина не в - "из-за соображений безопасности", а вто м что данные перменные создаются из переменных окружения ПХП, тоесть убив эту переменную она всеравно создастся в следующем запуске со всеми исходными значениями. Сюда переменная транслируется из заголовков запроса браузера - а значит нам надо прибить эту всю конструкцию в браузере, чтобы он перестал слать заголовок "Authorization: Basic " ... этого можно добиться отослав header( "HTTP/1.0 401 Unauthorized"); ;-) что и говорил флоппик !
    alBoo - твоя конструкция и нужна для того чтобы отделить вход от выхода и просто работы ;-)
     
  11. alBoo

    alBoo Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    63
    Симпатии:
    0
    http://www.php.net/manual/ru/features.http-auth.php