2012-05-07 13 views
22

Określono limit czasu sesji w pliku web.config .. kiedy sesja ma limit czasu, nie otrzymuję przekierowania do strony logowania, ale pojawia się błąd informujący o referencji obiektu nie ustawione na instancję.Jak sprawdzić, czy sesja wygasła, czy nie w asp.net

Czy ktoś może mi podać rozwiązanie tego problemu?

+2

Zamieść swój kod. Jak sprawdzasz wygaśnięcie sesji? – Oded

+0

Udostępnij również swoją konfigurację internetową. – Deepesh

+0

Dwie różne rzeczy: sesje nie wpływają bezpośrednio na stan uwierzytelnienia. Jeśli używasz FormsAuth, oznacza to twój stan zgłoszenia. Jeśli więc chcesz podać ważność biletu w stanie sesji (co jest złym pomysłem, BTW), musisz to zrobić ręcznie. – HackedByChinese

Odpowiedz

14

można sprawdzić właściwość HttpContext.Current.User.Identity.IsAuthenticated który pozwoli Ci wiedzieć, czy istnieje obecnie uwierzytelniony użytkownik lub nie.

+6

Czy wygaśnięcie sesji jest całkowicie równoznaczne z "IsAuthenticated" zmienia się na false? – toddmo

+1

Bez względu na to, czy odwiedzający po raz pierwszy, czy przekroczony limit czasu użytkownika, 'HttpContext.User.Identity' będzie miał te same wartości. – Bardicer

9

Edit

można użyć właściwości IsNewSession aby sprawdzić, czy sesja została stworzona na żądanie strony

protected void Page_Load() 
{ 
    if (Context.Session != null) 
    { 
     if (Session.IsNewSession) 
     { 
     string cookieHeader = Request.Headers["Cookie"]; 
     if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)) 
     { 
      Response.Redirect("sessionTimeout.htm"); 
     } 
     } 
    } 
} 

pre

Store userid w zmiennej sesji, kiedy użytkownik loguje się na stronę i sprawdza na swojej stronie wzorcowej lub utworzonym formularzu strony bazowej, na której inna strona się dziedziczy ... i na stronie ładuje sprawdź, czy identyfikator użytkownika s obecne lub nie, jeśli nie niż przekierowanie do strony logowania

if(Session["Userid"]==null) 
{ 
    //session expire redirect to login page 
} 
+0

Dziękuję ... ale może to być użyte tylko dla jednej wartości sesji ... i użyłem więcej sesji w moim projekcie, więc chcę kodu określonego w pliku web.config ... która dotyczy wszystkich stron – user1379439

+0

@ user1379439 - to zadziała dla wszystkich sesji, nie dla pojedynczej ..... sesji zostanie utworzona jako użycie logu do systemu ... czego jeszcze chcesz? masz pojęcie o sesji? –

+0

@ user1379439 - przejdź do tego adresu URL, aby uzyskać dostęp do tego, co chcesz ... http: //www.google.co.in/url? Q = http: //www.codeproject.com/Articles/227382/Alert-Session -Czas-out-in-Asp-Net & sa = U & ei = LLKnT8PeMpDzrQe3itHRAQ & ved = 0CBIQFjAA & sig2 = NDlgZI2yyYDIaQ3C1E-HGA & usg = AFQjCNF-3O2DlOTaG5dmjBsFqR63vmh2WQ –

6

sprawdzić, czy jest null lub nie np

if(Session["mykey"] != null) 
{ 
    // Session is not expired 
} 
else 
{ 
    //Session is expired 
} 
7

Wolę nie sprawdzać zmienną sesji w kodzie zamiast korzystać z FormAuthentication. Mają wbudowaną funkcjonalność do przekierowania do danej strony LoginPage podanej w web.config.

Jeśli jednak chcesz jawnie sprawdzić sesję, możesz sprawdzić wartość NULL dla dowolnej zmiennej utworzonej w sesji wcześniej, jak odpowiedział Pranay.

Można utworzyć stronę Login.aspx i napisać tam wiadomość, gdy sesja wygasa FormAuthentication automatycznie przekierowywać do loginUrl podane w sekcji FormAuthentication

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="30"> 
    </forms> 
</authentication> 

Chodzi o to, że nie można dać na stronę logowania i oddzielna SessionExpire, więc musisz pokazać/ukryć część sekcji Login.aspx, aby działać w obie strony.

Jest też inny sposób przekierować do sessionexpire stronę po limitu czasu bez zmiany formauthentication-> loginurl, patrz poniższy link poniżej: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html

+0

Dziękuję ... mam kod wygasania sesji ... Teraz chcę, aby komunikat był wyświetlany lub komunikat ostrzegawczy, gdy sesja wygasa dla użytkownika ... Czy znasz kod do tego? – user1379439

+0

Zmodyfikowalem moją odpowiedź –

7

Używaj Session.Contents.Count:

if (Session.Contents.Count == 0) 
{ 
    Response.Write(".NET session has Expired"); 
    Response.End(); 
} 
else 
{ 
    InitializeControls(); 
} 

Powyższy kod zakłada, że mieć co najmniej jedną zmienną sesji utworzoną, gdy użytkownik po raz pierwszy odwiedza twoją witrynę. Jeśli go nie masz, najprawdopodobniej nie używasz bazy danych do swojej aplikacji. Dla swojego przypadku możesz po prostu ręcznie przypisać zmienną sesji, korzystając z poniższego przykładu.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["user_id"] = 1; 
} 

Życzymy powodzenia!

2

Używam odpowiedzi @ Adi-Lester i dodam kilka metod.

Sposób sprawdzenia, czy sesja jest Alive

public static void SessionIsAlive(HttpSessionStateBase Session) 
{ 
    if (Session.Contents.Count == 0) 
    { 
     Response.Redirect("Timeout.html"); 
    } 
    else 
    { 
     InitializeControls(); 
    } 
} 

Tworzenie sesji var w wczytywania strony

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["user_id"] = 1; 
} 

Tworzenie metody SaveData (ale można go używać we wszystkich metodach)

protected void SaveData() 
{ 
    // Verify if Session is Alive 
    SessionIsAlive(Session); 

    //Save Data Process 
    // bla 
    // bla 
    // bla 
} 
1

Tutaj sprawdzam wartości sesji (dwie wartości wypełnione w polu tekstowym na poprzedniej stronie)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["sessUnit_code"] == null || Session["sessgrcSerial"] == null) 
    { 
     Response.Write("<Script Language = 'JavaScript'> alert('Go to GRC Tab and fill Unit Code and GRC Serial number first')</script>"); 
    } 
    else 
    { 

     lblUnit.Text = Session["sessUnit_code"].ToString(); 
     LblGrcSr.Text = Session["sessgrcSerial"].ToString(); 
    } 
} 
1

w ten sposób wiele osób wykrywa sesję wygasła lub nie. poniższy kod może ci pomóc.

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Context.Session != null) 
     { 
      if (Session.IsNewSession) 
      { 
       HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"]; 
       if (newSessionIdCookie != null) 
       { 
        string newSessionIdCookieValue = newSessionIdCookie.Value; 
        if (newSessionIdCookieValue != string.Empty) 
        { 
         // This means Session was timed Out and New Session was started 
         Response.Redirect("Login.aspx"); 
        } 
       } 
      } 
     } 
    } 
Powiązane problemy