PHP Digérer auth, déconnexion
Est-il un moyen de déconnexion d'une authentification digest fait en php.
J'ai essayé la fonction unset($_SERVER["PHP_AUTH_DIGEST"]);
Mais il l'habitude de demander à se reconnecter.
Je sais que si je ferme le navigateur, puis il va travailler et voici mes fonctions.
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;
}
Que dois-je besoin d'ajouter à la fonction de déconnexion pour terminer cette off.
Si je change le royaume, il fonctionne, mais je ne veux pas qu'il soit changé.
- Double de l'authentification HTTP de déconnexion via PHP. La réponse: Non.
- Je sais que cela peut être fait, juste ne sais pas comment.
- fermez le navigateur est le seul moyen, que l'information est enregistrée à l'intérieur du navigateur
Vous devez vous connecter pour publier un commentaire.
La suppression de la variable $_SERVER['PHP_AUTH_DIGEST'] n'aura aucun effet. Le problème est, il n'est pas vraiment une "bonne" réponse à la tâche que vous avez défini.
La spécification HTTP, n'est pas techniquement le lui permettent, mais dans la pratique, la plupart des navigateurs, il y aura effectivement de "déconnecter l'utilisateur" si vous leur envoyez un autre 401. Par php.net/http-auth:
À partir de votre code, la méthode la plus simple est probablement quelque chose comme:
mais, encore une fois, ce n'est pas réellement quelque chose approuvé par la spécification HTTP.
Réponse faisant autorité: http://tools.ietf.org/id/draft-ietf-httpbis-p7-auth-12.txt - section 6.1
Il n'y a aucun moyen fiable.
Quelques solutions de contournement consiste à simuler un 401 et la modification de la realm=, ou à la reconnaissance de l'AJAX auth demande à dessein les informations d'identification non valides.
logout1.php
qui, par exemple, envoieheader("Status:401 Logout")
etheader("WWW-Authenticate: Invalidate, Basic realm=logout")
. Éventuellement un deuxième appel AJAX avec des informations d'identification non valides pourlogout2.php
qui la reconnaît sans vérifier.Status: 401 logout
ouHTTP/1.1 401 Logout
sont-ils différents?