PHP Digest auth, logout

¿Hay alguna manera de cerrar la sesión de una autenticación resumida realizada en php?

He intentado unset ($ _ SERVER [“PHP_AUTH_DIGEST”]); Pero no pedirá volver a iniciar sesión. Sé que si cierro el navegador, funcionará y aquí están mis funciones.

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; } 

¿Qué más necesito agregar a la función de cierre de sesión para terminar esto?

Si cambio el reino funciona, pero no quiero que se modifique.

Desarreglo $ _SERVER [‘PHP_AUTH_DIGEST’] no tendrá efecto. El problema es que realmente no hay una respuesta “buena” para la tarea que ha establecido.

La especificación HTTP no lo permite técnicamente, pero en la práctica, la mayoría de los buscadores “desconectarán al usuario” si les envía otro 401. Por php.net/http-auth:

Tanto Netscape Navigator como Internet Explorer borrarán el caché de autenticación de la ventana del navegador local para el reino al recibir una respuesta del servidor de 401. Esto efectivamente puede “desconectar” a un usuario, forzándolos a volver a ingresar su nombre de usuario y contraseña. Algunas personas usan esto para “desconectarse” de los inicios de sesión, o proporcionan un botón de “cerrar sesión”.

De su código, el método más simple es probablemente algo así como:

 function logout(){ header('HTTP/1.1 401 Unauthorized'); return true; } 

pero, nuevamente, esto no es algo aprobado por la especificación HTTP.

Respuesta autorizada : http://tools.ietf.org/id/draft-ietf-httpbis-p7-auth-12.txt – sección 6.1
No hay una manera confiable.

Algunas soluciones incluyen falsificar un 401 y cambiar el reino =, o reconocer una solicitud de autenticación AJAX con credenciales intencionalmente no válidas.