2011-01-05 13 views
7

In meiner Webanwendung verwende ich einige Sitzungsvariablen, die festgelegt werden, wenn ich mich anmelde:Sitzungsvariablen Timeout in asp.net app

z. Session("user_id") = reader("user_id")

Ich benutze dies durch meine App.

Wenn die Session-Variable mal aus, wirft dies vor allem Fehler bei der Verbindung zur Datenbank als session("user_id") für einige Abfragen erforderlich ist.

Wie kann ich meine Session-Variablen so festgelegt, dass, sobald sie abgelaufen sind, um die Login-Seite zu gehen oder, wie zumindest erhöhen können die Länge der Zeit, die zur Verfügung steht?

Antwort

11

ich Ihnen raten, verwenden Formularauthentifizierung. Der Trick besteht darin, sicherzustellen, dass Ihre Formularauthentifizierung vor der Sitzung abläuft.

How to redirect to LogIn page when Session is expired (ASP.NET 3.5 FormsAuthen)

Zum Beispiel:

ich darüber in dieser Antwort hier schrieb

Ihre Formularauthentifizierung konfigurieren - dies setzt das Timeout bis 60 Minuten:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 

Verlängern Sie den Sitzungsablauf auf eine längere Zeit:

<sessionState 
    mode="InProc" 
    cookieless="false" 
    timeout="70"/> 

In Ihrem Login.aspx Code hinter Sie können auch vor der Erteilung von Sitzungswerte eine Session.Clear(); entfernen veraltete Sitzungsdaten tun.

1

In der Vergangenheit habe ich auf jeder Seite eine Basisseite oder Masterseite verwendet haben (was eine Ausnahme für die Login-Seite), die eine Session-Information liest, um zu sehen, ob ein Benutzer in der aktuell angemeldet ist.

Wenn es jemals eine Null liest, speichert es die aktuelle URL und leitet auf die Anmeldeseite um.

Nachdem es Anmeldung liest die gespeicherte URL und leitet auf die angeforderte Seite den Benutzer zurück.

Das Erhöhen des Sitzungszeitlimits ist eine Einstellung in IIS.

1

Wie kann ich meine Session-Variablen so festgelegt, dass, sobald sie

zur Login-Seite gehen timed out

Überprüfen Sie, ob sie sind = null ein tun Response.Redirect("Home.aspx");

oder wie kann zumindest erhöhen Sie die Länge der Zeit, die verfügbar sind?

Sein in der web.config im sessionState Element

0

Ich denke, dass viele Leute ihre Sitzungsaufrufe wickeln, um ein "Lazy Load" -Muster bereitzustellen.Etwas wie dieses:

class SessionHelper 
{ 
    public static string GetUserId() 
    { 
     string userId = (string)System.Web.HttpContext.Current.Session["UserId"]; 

     if(userId == null) 
     { 
      userId = reader("UserId"); 
      System.Web.HttpContext.Current.Session["UserId"] = userId; 
     } 

     return userId; 
    } 
}