La réponse simple est que vous ne pouvez pas vous déconnecter de manière fiable de l'authentification http.
La réponse longue:
Http-auth (comme le reste de la spécification HTTP) est censé être sans état. Donc être «connecté» ou «déconnecté» n'est pas vraiment un concept qui a du sens. La meilleure façon de le voir est de demander, pour chaque requête HTTP (et rappelez-vous qu'une page est généralement chargée en plusieurs requêtes), "êtes-vous autorisé à faire ce que vous demandez?". Le serveur considère chaque demande comme nouvelle et sans rapport avec les demandes précédentes.
Les navigateurs ont choisi de se souvenir des informations d'identification que vous leur avez fournies sur le premier 401 et de les renvoyer sans l'autorisation explicite de l'utilisateur sur les demandes suivantes. Il s'agit d'une tentative de donner à l'utilisateur le modèle «connecté / déconnecté» auquel il s'attend, mais c'est purement un kludge. C'est le navigateur qui simule cette persistance d'état. Le serveur Web n'en est absolument pas conscient.
Donc "se déconnecter", dans le contexte de http-auth est purement une simulation fournie par le navigateur, et donc en dehors de l'autorité du serveur.
Oui, il y a des kludges. Mais ils cassent RESTful-ness (si cela vous intéresse) et ils ne sont pas fiables.
Si vous avez absolument besoin d'un modèle connecté / déconnecté pour l'authentification de votre site, le meilleur pari est un cookie de suivi, avec la persistance de l'état stocké sur le serveur d'une manière ou d'une autre (mysql, sqlite, flatfile, etc.). Cela nécessitera que toutes les demandes soient évaluées, par exemple, avec PHP.