2009-04-02 10 views
6

Muszę zaimplementować funkcję automatycznego wylogowania w jednym z moich projektów i nie mogę pojąć, gdzie zacząć szukać pomysłów, ale SO.Asp.net: Wdrażanie funkcji automatycznego wylogowania

Potrzebuję, aby aplikacja przekierowała użytkownika na stronę logowania, jeśli sesja użytkownika wygasła. Proszę mi powiedzieć, jakie powinno być moje podejście do rozwiązania tego wymogu.

Problem Oświadczenie: Jeśli użytkownik opuści system dłużej niż n minut w dowolnej instancji logowania, system powinien się automatycznie wylogować.

Odpowiedz

6

Zostało to osiągnięte poprzez następujący sposób:

1) Zapisz czasu i daty każdego wniosku (z wyłączeniem serwerów i ajax ajax żądania wyboru sesja) na serwerze w sesji var.

2) Ankieta serwera za pomocą funkcji JS przy użyciu ajax w częstych odstępach czasu i sprawdź, czy różnica czasu między znacznikiem czasu sesji a czasem żądania ajax jest większa niż wartość timeout sesji, a następnie wylogowanie bieżącego użytkownika i Zwróć Bool dla tego żądania ajax.

3) Przekieruj bieżącą stronę na stronę logowania, jeśli zwrócony bool jest prawdziwy.

+2

Powinieneś oznaczyć to jako odpowiedź, aby oszczędzić ludzi spędzających na nim czas –

1
+0

wiem, jaki jest stan sesji, po prostu chcę przekierować użytkownika na stronę logowania, gdy wygasa! – renegadeMind

+0

Nie przeczytałeś całej strony, huh! Przeczytaj sekcję "Przykładowa aplikacja stanu sesji" w powyższym łączu. Zmodyfikuj metodę "CheckSession", a zamiast wiersza "span1.InnerHtml =" NIC, UTRACONE DANE SESJI! "" - dodaj kod do przekierowania na swoją stronę. – sangupta

0

Ponieważ nie wiem od czego zacząć, może się okazać to 4guys artykuł przydatne: http://www.4guysfromrolla.com/webtech/110701-1.shtml

Edycja

brzmi jak jQuery timer może być Przydatne, jeśli chcesz przekierować się do adresu URL po upływie znanego okresu (tj. czasu wygaśnięcia sesji).

Mam nadzieję, że to pomoże.

+0

Wiem, że działa uwierzytelnianie; hows dat pomoże mi? Pamiętaj, że użytkownik nie będzie wchodził w interakcję z witryną, a aplikacja będzie przekierowywać ją na stronę logowania po wygaśnięciu sesji! Będzie to strona klienta! – renegadeMind

+0

Być może spróbuj ponownie napisać swoje pytanie, aby było bardziej zrozumiałe dla osób, które chcą spędzić czas, pomagając ci. –

+0

dobrze, że słowo auto-wylogowanie było oczywiste; zgadnij, że nie jest! – renegadeMind

14

Przechodząc do komentarzy tak samo jak do pytania, nie jestem pewien, czy szukasz czegoś, co wyloguje użytkownika po pewnym czasie, niezależnie od aktywności, lub tuż po okresie bezczynności.

Jeśli jesteś zadowolony używać standardowego ASP.NET mechanisms, można to zrobić za ciebie bez większych prac:

Skonfiguruj membership provider.

upewnić się, że authentication section definiuje loginUrl:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" /> 
</authentication> 

Można ustawić limit czasu innego niż domyślne 30 minut przy użyciu "timeout" atrybut na forms element:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" timeout="15"/> 
</authentication> 

Będzie logowaniu użytkownik po 15 minutach bezczynności w witrynie (przy otwartej przeglądarce bez "pulsu" javascript lub jeśli spędzają 15 minut w innej witrynie).

Odmowa dostępu do anonimowych użytkowników

<authorization> 
    <deny users="?" /> 
</authorization> 

Następnie upewnić się, że Twój login, rejestracja i ewentualnie zapomniane stron hasło są accessable dla wszystkich użytkowników za pomocą location Element:

<location path="Logon.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<location path="Register.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<!-- etc --> 

ten sposób, gdy uwierzytelnianie użytkownika ciasteczko wygasa, zostanie przekierowane na adres URL podany w elemencie loginUrl na stronie formularzy.


Jeśli nie używasz standardowych mechanizmów ASP.NET, prawdopodobnie lepiej byłoby zaimplementować model typu "strona bazowa".

Utwórz nową klasę dziedziczącą po System.Web.UI.Page, która sprawdzi stan logowania użytkownika, a jeśli nie są zalogowani/przekroczono limit czasu, przekieruj ich na stronę logowania.

Na twoich stronach, które mają zostać zablokowane, zamiast dziedziczyć z System.Web.UI.Page, dziedziczysz z klasy strony głównej (przykład tego rodzaju konfiguracji, aby zrobić coś podobnego - sprawdź ustawienia na każdym z nich strona) może być postrzegane w my answer here


Twojej strony logowania będzie prawdopodobnie trzeba mieć jakieś ramy krach JS w niej wskoczyć z powrotem z iFrame:

if (top!=self.parent){ 
    top.location=self.parent.location; 
} 

Czy mówisz, że naciskając "wstecz", nadal będą widzieć twoje strony przez pamięć podręczną przeglądarki? W takim przypadku trzeba być zabawy z nagłówkami Cache na każdej stronie:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Ok, dobrze, w takim razie będziesz również potrzebował obiekt Timer JS wykonać gości. Wymienić na stronę logowania - mają to w kontroli użytkownika na każdej stronie (albo jeszcze lepiej, na stronie głównej), aby automatycznie przekierować użytkownika po n minut:

<script type="text/javascript"> 
    setTimeout('location.Replace("/login.aspx")', 900000); 
</script> 

czas jest w milisekundach, więc wolę przenieś je za 15 minut i nie ma potrzeby instalowania całego środowiska jQuery w tym celu.

Można również zajrzeć do meta tag odświeżania:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" /> 

które zmusi przeglądarkę do odświeżenia do strony logowania po 15 minutach (w tym jeden jest w sekundach).

+0

Oto moja instrukcja Prob: Jeśli użytkownik opuści system dłużej niż n minut w dowolnej instancji logowania, system powinien automatycznie się wylogować. Przykro mi, jeśli pytanie nie zostało poprawnie sformułowane. – renegadeMind

+0

Jeśli korzystasz z uwierzytelniania formularzy, ustaw atrybut timeout na "n" minut, a jego token uwierzytelniający wygaśnie po "n" minutach braku aktywności - albo w oknie przeglądarki pozostawionym otwartym, albo w tym samym czasie przechodząc do innej witryny. . –

+0

Dodałem trochę szczegółów, aby uwzględnić ustawienie limitu czasu, a także mówić o możliwości modyfikacji nagłówków pamięci podręcznej dla stron. –