Http Authentification и PHP

Discussion in 'PHP' started by Helios, 24 Apr 2007.

  1. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Делаю авторизацию для админки одного портала. Использую для получения пары login/pass Http-Авторизацию.

    Если со входом в систему все работает нормально, то с выходом чет не работает:

    Для выхода использую ссылку index.php?logout=true, при этом пользователь получает в ответ:

    После чего у браузера, по идее, желание отправлять аутентификационную информацию должно пропасть...

    Но нет... Нажимаю Cancel, вижу страницу с информацией о ошибке аторизации. Подправляю в адресной строке index.php?logout=true на index.php и, о чудо, я опять в админке...

    Собственно вопрос: как организовать нормальный выход из системы, не используя дополнительной информации типа кукисов или сессий?
     
    3 people like this.
  2. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Попробуй слать юзера на index.php пост-формой, в постварах сунь идентификатор логаута через скрытый инпут.
     
  3. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    При логауте, тебе нужно снова послать запрос на авторизацию, и когда появится окно, не вводя ничего, нажать ОК, а после этого, скрипт должен сообщить об удачной авторизации.
     
    #3 hidden, 24 Apr 2007
    Last edited: 24 Apr 2007
  4. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    PHP:
    <?php

    $username 
    $PHP_AUTH_USER;
    $password $PHP_AUTH_PW;

        
    cfunction authenticate() {
            
    Header("WWW-authenticate: Basic realm=\"Restrict
    ("
    .strftime("%r",time()).")\"");
            
    Header("HTTP/1.0 401 Unauthorized");
            echo 
    "You must enter a valid login ID and password to access
    this resource\n"
    ;
            exit;
        }

        if(
    $logout==1) {

             
    setcookie("login","off");
             
    $PHP_SELF =
    str_replace("logout=1","",$PHP_SELF);
             
    header("Location: $PHP_SELF");
             exit();
        }

        if(!isset(
    $username) && !isset($password) ||
    $login=="off") {
            
    setcookie("login","on");
            
    authenticate();
        } else {

           
    /*
           Authtentication code here
           */

            
    if(!$auth) {
                
    authenticate();
            }
            else 
    setcookie("login","on");
        }

    ?>

    Hi <?=$PHP_AUTH_USER?> you are logged in :-)

    <a href="<?=$PHP_SELF?>?logout=1">Click here to
    logout</a>
     
    1 person likes this.
  5. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    В итоге сделал обычную авторизацию с использованием сессий (логин и пасс беру через WWW-Authenticate - так хотел заказчик), но вопрос остается открытым:

    Возможно ли сделать нормальный выход без помощи дополнительных довесков?
     
  6. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Ну вот я написал вариант без кукисов и сессий - должно работать.