2010-12-10 11 views
12

Jaki jest najlepszy sposób wylogowania użytkownika po zakończeniu lub wygasnięciu sesji?Jak wylogować użytkownika po przekroczeniu lub zakończeniu sesji

Dzięki za pomoc.

+1

Czy chodzi ci po prostu o to, aby użytkownik został nieuwierzytelniony, czy faktycznie przekieruje użytkownika do "Hej, przekroczyłeś limit czasu!" strona po zbyt długim oczekiwaniu, a sesja wygasła? – Pandincus

+0

Obie, jeśli to możliwe? – zSynopsis

+0

, gdy sesja się kończy, kolejne żądanie, które wykonają, nie będzie uwierzytelniane. W takim przypadku strona może to sprawdzić po wczytaniu nowej strony. Aby przekierować je, jeśli były zbyt długo na tej samej stronie, będziesz chciał napisać javascript na stronie, która ma odliczający czas, który jest równy wartości limitu czasu sesji. Gdy licznik trafi zero przekierowania, ponieważ sesja jest nieważna. (Kinda - jedno zastrzeżenie jest takie, że jeśli przeglądasz twoją stronę w innej zakładce - to utrzyma sesję przy życiu, podczas gdy pierwsza karta javascript wciąż będzie odliczać) – Prescott

Odpowiedz

11

To naprawdę zależy od wymaganej funkcjonalności, której szukasz. Zakładam, że korzystasz z FormsAuthentication.

Są dwie osobne rzeczy, które trzeba się martwić o: the Sesja a FormsAuthentication cookies. O ile się nie mylę, oba mają oddzielne limity czasu.

Jeśli problem masz jest, że sesja jest limit czasu, ale użytkownik nadal jest uwierzytelniona, można spróbować kombinacji z następujących czynności:

1: Upewnienie cookie uwierzytelniania ma taką samą wartość limitu czasu jako sesję:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2: zdarzenia Page_Load, należy sprawdzić, czy sesja wygasła:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(Zobacz http://www.eggheadcafe.com/articles/20051228.asp w celu uzyskania informacji o wykryciu limitu czasu sesji)

Jeśli chcesz mieć więcej przyjemności dla użytkownika, możesz użyć javascript do zainicjowania jakiegoś modalnego wyskakującego interfejsu użytkownika po X minutach. To wyskakujące okienko po prostu pozwoliłoby użytkownikowi zainicjować kliknięcie przyciskiem, co spowodowałoby odświeżenie AJAX na serwerze, przedłużając tym samym ich uwierzytelnianie i sesyjny plik cookie bez konieczności ponownego ładowania strony. Nigdy tego nie wdrożyłem, ale spójrz, this guy made an ASP.NET AJAX control!

+0

Dzięki Pandincus – zSynopsis

Powiązane problemy