This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

Witam Was ponownie po dłuższej przerwie i zapraszam do lektury kolejnego wpisu. Jak zapewne wiecie, zabezpieczyć dostęp do danych na serwerze można na bardzo wiele sposobów. Wszelkiego rodzaju skrypty logowania bazujące na różnych mechanizmach autoryzacji skutecznie “utrudniają” nam dostęp do żądanych informacji i zmuszają do posłusznego wklepywania loginów i haseł w odpowiednie pola formularzy. W swojej wielkoduszności programiści oprócz logowania zwykle implementują też komplementarną akcję wylogowywania się z konta użytkownika - zaznaczam - zwykle, ponieważ nie zawsze takie “coś” istnieje. W dzisiejszym wpisie chciałbym pokazać przykład takiego “negatywnego przypadku” oraz doradzić, jak wybrnąć z zaistniałej sytuacji.

Problem.

O czym mowa? Oczywiście o tytułowym logowaniu przy użyciu autoryzacji HTTP. Zapewne nie raz widzieliście takie, lub podobne okienko w przeglądarce:

formularz logowania do serwera

jeśli nie wiedzieliście o tym, to właśnie Was informuję, że pojawia się ono w przypadku wykonywania logowania opartego o mechanizm plików .htaccess i .htpasswd. W czym problem? Otóż nie istnieje jawna i ogólnie wspierana możliwość wylogowania się z takiej "sesji". Pozwolę sobie zacytować fragment manuala Apache na ten temat:

How do I log out?

Since browsers first started implementing basic authentication, website administrators have wanted to know how to let the user log out. Since the browser caches the username and password with the authentication realm, as described earlier in this tutorial, this is not a function of the server configuration, but is a question of getting the browser to forget the credential information, so that the next time the resource is requested, the username and password must be supplied again. There are numerous situations in which this is desirable, such as when using a browser in a public location, and not wishing to leave the browser logged in, so that the next person can get into your bank account.

However, although this is perhaps the most frequently asked question about basic authentication, thus far none of the major browser manufacturers have seen this as being a desirable feature to put into their products.

Consequently, the answer to this question is, you can’t. Sorry.

"Sorry", to cała odpowiedź na nasze pytanie - nie ma i nie będzie takiej możliwości. Jest jednak pewien sposób na poradzenie sobie z taką niedogodnością. Zapraszam więc do lektury rozwiązania. ;]

Rozwiązanie.

Firefox.

W przypadku przeglądarki Mozilla Firefox istnieje bardzo fajne rozwiązanie polegające na wykorzystaniu funkcjonalności jednej z wtyczek [za to właśnie go uwielbiam ;]]. Wtyczką tą jest WebDeveloper, a pobrać można go stąd. Po zainstalowaniu i włączeniu wtyczki ukaże się nam bardzo użyteczny pasek narzędzi. Jeśli zechcemy wylogować się z wspomnianego konta, wystarczy wybrać z menu pozycję Różne > Wyczyść prywatne dane > Wyczyść dane uwierzytelniania HTTP:

czyszczenie danych autoryzacji http

i tyle - zostaliśmy wylogowani ze wszystkich sesji autoryzowanych mechanizmem .htaccess.

Wszystkie [inne] przeglądarki.

Jeśli jednak nie jesteś i / lub nie zamierzasz [a szkoda ;]] być użytkownikiem wyżej wymienionej, to nie martw się, dla Ciebie też mam dobrą wiadomość - będziesz mógł się wylogować ze swojego konta. ;] Co prawda nie będzie to tak wygodne jak w przypadku Firefoxa, ale jednak. Jedyne, co musisz zrobić, to zamknąć przeglądarkę i otworzyć ją ponownie - zostaniesz wtedy ponownie spytany o login i hasło, co oznacza, że serwer “już Cię nie pamięta”, ergo zostałeś wylogowany. Dane o uwierzytelnianiu HTTP są trzymane w cache’u tylko przez okres istnienia aktualnej sesji przeglądarki, stąd każdorazowe jej zamknięcie “wyrzuca” nas z takiego serwera.

Podsumowanie.

Być może nie wydaje się to jakimś specjalnie zaawansowanym sposobem ani wiadomością, ale przyznam, że dopiero niedawno natrafiłem na ten problem testując dostęp do poszczególnych podkatalogów projektu współpracując z jednym z klientów. Pomyślałem więc od razu, żeby się podzielić z Wami tym, co znalazłem na ten temat, żebyście nie musieli tak jak ja drążyć tematu, tylko dostać wszystko na tacy. ;] Do zobaczenia wkrótce w kolejnym wpisie!