【发布时间】:2011-06-03 19:22:12
【问题描述】:
有没有办法退出在 php 中完成的摘要身份验证。
我试过 unset($_SERVER["PHP_AUTH_DIGEST"]); 但它不会要求重新登录。 我知道如果我关闭浏览器,它就会工作,这是我的功能。
function login(){
$realm = "Restricted area";
$users = array("jamesm"=>"");
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)."\"");
return false;
}
if (!($data = http_digest_parse($_SERVER["PHP_AUTH_DIGEST"])) || !isset($users[$data["username"]]))
return false;
$A1 = md5($data["username"] . ":{$realm}:{$users[$data["username"]]}");
$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)
return false;
return true;
}
function logout(){
unset($_SERVER["PHP_AUTH_DIGEST"]);
return true;
}
我还需要在注销功能中添加什么来完成此操作。
如果我改变它的工作领域,但我不希望它被改变。
【问题讨论】:
-
HTTP authentication logout via PHP 的副本。答案:没有。
-
我知道可以做到,只是不知道怎么做。
-
关闭浏览器是唯一的方法,因为信息是在浏览器中注册的
标签: php security logout http-status-code-401 digest-authentication