2009-07-22 17 views
26

Powiel możliwe:
HTTP authentication logout via PHPJak się wylogować podczas korzystania z uwierzytelniania .htaccess (i .htpasswd)?

Hi

Mam niektóre funkcje na mojej stronie chronionej przy użyciu .htaccess i .htpasswd. Gdy użytkownicy próbują uzyskać do nich dostęp, wyświetlają monit o wprowadzenie szczegółów. Wpisują swoje dane, wchodzą i widzą wszystko itd. Wszystko działa dobrze.

Moje pytanie brzmi: jak utworzyć funkcję logout dla tego typu uwierzytelniania. Wiem, że mogą zamknąć okno przeglądarki na "Wylogowanie". Ale to nie jest idealne. Co byś mi zasugerował?

Dzięki.

+0

Zapytano wcześniej, np. zobacz http://stackoverflow.com/questions/449788/http-authentication-logout-via-php – VolkerK

+0

Nie ma żadnego rodzaju implementacji bez napisania kilku linii do usunięcia sesji lub zresetowania nagłówków. Spróbuj podejście prosto do przodu. http://blog.acpmasquerade.com/2011/09/basic-http-authentication-straight.html#more – acpmasquerade

Odpowiedz

31

Przeglądarki zazwyczaj nie obsługują tego, patrz How do I log out?

Od przeglądarek zaczynałem realizacji uwierzytelniania podstawowego, administratorzy www chciałem wiem jak pozwolić użytkownikowi wylogować. Ponieważ przeglądarka buforuje nazwy użytkownika i hasło z uwierzytelniania królestwa, jak opisano wcześniej w tym tutoriala, to nie jest funkcją konfiguracji serwera, ale to kwestia coraz przeglądarkę do zapomnieć informacje uwierzytelniające , więc następnym razem, gdy wymagany jest zasób , należy ponownie podać nazwę użytkownika i hasło . Istnieje liczne sytuacje, w których jest to pożądane, jak w przypadku korzystania z przeglądarkę w publicznym miejscu, a nie chcący opuścić przeglądarka zalogowany w, tak, że następna osoba może dostać do swojego konta bankowego.

Jednak, choć jest to chyba najczęściej zadawane pytanie o uwierzytelnianie podstawowe, jak dotąd żaden z główni producenci przeglądarek mają widział to jako pożądaną cechą umieścić w swoich produktach.

W związku z tym odpowiedź na to pytanie brzmi, nie można. Przepraszam.

Istnieją rozszerzenia przeglądarki, które pozwalają wyczyścić uwierzytelnianie HTTP dla witryny. Dla przeglądarki Firefox rozszerzenie WebDeveloper (które jest jednym z moich ulubionych rozszerzeń) oferuje tę funkcję. Dostępne menu to Miscellaneous/Clear Private Data/HTTP Authentication.

+0

Ach, rozumiem ... dzięki. – TigerTiger

+5

Domyślny sposób wylogowania się z autoryzacji HTTP Firefoksa jest dostępny w sekcji "Narzędzia"> "Wyczyść historię ostatnich ...", jak w polu "Aktywne logowanie". Nie jest to ani intuicyjne, ani nie pozwala na wylogowanie się z jednej domeny, zawsze wylogowujesz się z każdej strony. – aef

19

Testowany na firefox i chrome. Co możesz zrobić, to wysłać użytkownika pod numer http://logout:[email protected]. To zastąpi ich bieżącą nazwę użytkownika/hasło wylogowaniem/wylogowaniem (może to być jakakolwiek nieprawidłowa kombinacja użytkownika/hasła), a ponieważ mają teraz nieprawidłową nazwę użytkownika/hasło, będą musieli zalogować się ponownie, aby uzyskać dostęp do witryny.

W operze to nie działa, ponieważ możesz mieć kilka nazw użytkowników/haseł w tym samym czasie. Nie działało też na IE, ponieważ IE nie obsługuje adresów URL http://username:[email protected].

+9

Zgodnie z RFC 3986 (URI: składnia ogólna) sekcja 3.2.1. (Informacje o użytkowniku) użycie 'user: password @ host 'jest przestarzałe. Używanie tylko 'http: // logout @ yourserver.example.com /' nie jest i powinno działać w większości przypadków. – aef

+1

chrome też może – apis17

+0

to działało dla mnie dzisiaj w chrome, świetne rzeczy, dzięki chłopaki! –

2

Jest to możliwe, aby się wylogować. Powinieneś zaimplementować stronę wylogowania, która będzie zwracać HTTP 401, dopóki użytkownik nie wprowadzi informacji logowania ZŁY, a następnie przekieruje gdzie indziej. Przeglądarka zapamiętuje najnowsze dane logowania zaakceptowane, a zatem zastępuje prawidłowe logowanie.

To jednak nie nadaje się do użytku, ponieważ wymaga współpracy użytkownika.

2

Wpadłem na ten problem kilka lat temu. Niesamowicie frustrujące jest odkrycie, że każdy ma problem i nikt nie chce go rozwiązać w sposób ogólny.

Jak wspomniano w Inadequate Logout functionality in HTTP Authentication Myślę, że odpowiedź jest zmiana RFC, aby umożliwić limity czasu i obsługi przycisku wyloguj. Dodatkowa sugestia autora, że ​​serwer może wysłać nagłówek "wylogowania", faktycznie wyeliminowałaby potrzebę obsługi klienta klienta klienta, ponieważ strony internetowe mogłyby po prostu zawierać łącze na stronie internetowej do adresu URL, który zwraca niezbędny kod odpowiedzi. i/lub nagłówek, aby unieważnić bieżącą sesję.

Powiązane problemy