Нужно, чтобы при клике на кнопку выход со ссылкой index.php?exit=1
происходил переход на страницу, удалялся $_SERVER['PHP_AUTH_DIGEST'], и затем происходил переход на index.php, так как при вводе логина и пароля с index.php?exit=1 они тут же удаляются.
Без хедера и эксита удалялся $_SERVER['PHP_AUTH_DIGEST'] нормально, а с хедером-переходом - происходит переход, а данные не удаляются почему-то.
-----------------
Это начало документа
<?php
if (isset($_GET['exit'])) {
$exit=intval(trim($_GET['exit']));
if ($exit!='') {
unset($_SERVER['PHP_AUTH_DIGEST'], $auth_name);
header('Location: index.php');
exit;
};
};
...
Весь код тут:
index.php:
<?php include ("lock.php"); ?>
lock.php:
<?php
if (isset($_GET['exit'])) {
$exit=intval(trim($_GET['exit']));
if ($exit!='') {
unset($_SERVER['PHP_AUTH_DIGEST'], $auth_name);
header('Location: index.php');
exit;
};
};
include ('../blocks/db_action.php');
$realm = "Administrator Panel";
if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header("WWW-Authenticate: Digest realm='".$realm."',qop='auth',nonce='".uniqid()."',opaque='".md5($realm)."'");
die("Authorisation failed <a href='/index.php'>To the site</a> <a href='/admin/index.php'>Authorise</a>");
}
//user => password
$user_db = @mysql_query("SELECT `pass`, `user` FROM `userlist`", $db) or die();
if (mysql_num_rows($user_db) >0) {
$user = mysql_fetch_array($user_db);
do $users[$user['user']]=$user['pass'];
while($user = mysql_fetch_array($user_db));
unset($user_db,$user);
};
// анализируем переменную PHP_AUTH_DIGEST
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || !isset($users[$data['username']])) {
unset($_SERVER['PHP_AUTH_DIGEST']);
header('HTTP/1.1 401 Unauthorized');
header("WWW-Authenticate: Digest realm='".$realm."',qop='auth',nonce='".uniqid()."',opaque='".md5($realm)."'");
};
// генерируем корректный ответ
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
unset($users);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);
if ($data['response'] != $valid_response) {
unset($_SERVER['PHP_AUTH_DIGEST']);
header('HTTP/1.1 401 Unauthorized');
header("WWW-Authenticate: Digest realm='".$realm."',qop='auth',nonce='".uniqid()."',opaque='".md5($realm)."'");
};
// ok, логин и пароль верны
$auth_name = $data['username'];
// функция разбора заголовка http auth
function http_digest_parse($txt)
{
// защита от отсутствующих данных
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));
preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}
return $needed_parts ? false : $data;
};
?>
Примечание:
Сделал в итоге так:
<?php
if (isset($_GET['exit'])) {
$exit=intval(trim($_GET['exit']));
if ($_GET['exit']==1) {
header('HTTP/1.1 401 Unauthorized');
echo "<meta http-equiv='refresh' content='0; url=/admin/' />";
exit();
};
};
.....
Если вместо echo "<meta http-equiv='refresh' content='0; url=/admin/' />"; вставить php header('Location: /admin/'); - не работает почему-то. Спасибо огромное!