PDA

Просмотр полной версии : Http Authentification и PHP


Helios
24.04.2007, 22:20
Делаю авторизацию для админки одного портала. Использую для получения пары login/pass Http-Авторизацию.

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

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


HTTP/1.0 401 Unauthorized
Status: 401 Unauthorized
WWW-Authenticate: Basic realm="Administration area"


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

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

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

SMiX
24.04.2007, 22:33
Попробуй слать юзера на index.php пост-формой, в постварах сунь идентификатор логаута через скрытый инпут.

hidden
24.04.2007, 23:33
При логауте, тебе нужно снова послать запрос на авторизацию, и когда появится окно, не вводя ничего, нажать ОК, а после этого, скрипт должен сообщить об удачной авторизации.

blackybr
25.04.2007, 08:33
<?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>

Helios
25.04.2007, 11:24
В итоге сделал обычную авторизацию с использованием сессий (логин и пасс беру через WWW-Authenticate - так хотел заказчик), но вопрос остается открытым:

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

SMiX
25.04.2007, 18:20
Ну вот я написал вариант без кукисов и сессий - должно работать.