Я использовал базовую аутентификацию PHP при входе в систему.
И теперь я должен добавить выход на нашем сайте.
Я использую глобальную переменную для вычисления времени, и я возвращаю 401 ошибку после указанного времени.
Это похоже на выход из системы.
Но если пользователь нажимает кнопку отмены в окне аутентификации и обновляет (F5), аутентификация прошла успешно.
Хотя я пытался удалить PHP_AUTH_USER
но когда пользователь обновляет веб-браузер PHP_AUTH_USER
все еще установлено.
Вот мой код (login.php) и каждая страница включает в себя (login.php)
<?php
function auth( )
{
global $model;
header('WWW-Authenticate: Basic realm=' . $model);
header('HTTP/1.0 401 Unauthorized');
echo ("<div><b>401 Unauthorized</b></div></br>");
echo ("<div>You must enter a valid login ID and password.</div>");
exit();
}
$block = "AUTH_LOGIN";
$hCGI = fsockopen ($sock_address, 0, $errno, $errstr, 10);
$code = $GET_CODE . $API_CODE . $AUTH_LOGIN_CODE;
send_cgi_params($hCGI, $code, "GET", $block, $list);
recv_cgi_mesg($hCGI);
parse_str($g_recv_buff);
fclose($hCGI);
if(!isset($_SERVER['PHP_AUTH_USER']) && $_REQUEST["user"] == "" && $_REQUEST["pwd"] == "")
{
fwrite($mjtest, "php auth user null \n");
auth( );
}
else
{
$hCGI = fsockopen ($sock_address, 0, $errno, $errstr, 10);
if (!$hCGI)
{
echo "socket open fail ($errstr ($errno)) <br> \n";
}
else
{
if( !isset($_COOKIE['last_activity']) )
{
setcookie("last_activity", time(), time()+40 );
}
else
{
if ( (time() - $_COOKIE['last_activity'] > 20) )
{
unset( $_SERVER['PHP_AUTH_USER'] );
unset( $_SERVER['PHP_AUTH_PW'] );
auth( );
}
else
{
setcookie("last_activity", time() );
}
}
if($_REQUEST["user"] == "")
{
$user = $_COOKIE["auth_user"];
$pwd = $_COOKIE['auth_pw'];
}
else
{
$user = $_REQUEST["user"];
$pwd = $_REQUEST["pwd"];
}
}
//from here make a cgi params and send message.
//
?>
Задача ещё не решена.
Других решений пока нет …