c# - titel - title-tag




Wie kann ich Ausnahmen bei Formularauthentifizierungszeitüberschreitungen in ASP.NET behandeln? (2)

Wenn die Sitzung abgelaufen ist und der Benutzer auf einen Link zu einem anderen Webformular klickt, leitet die asp.net-Authentifizierung den Benutzer automatisch zur Anmeldeseite um.

Es gibt jedoch Fälle, in denen der Benutzer nicht auf Links zu anderen Webformularen klickt. Beispiel: Link in GridViews bearbeiten, wenn AutoCompleteExtender mit Textfeldern verwendet wird und die Anwendung versucht, die Informationen abzurufen, und grundsätzlich in jedem Fall, wenn ein Postback ausgeführt wird und das Ereignis nicht automatisch von der asp.net-Authentifizierung verarbeitet wird.

Was ist der beste Weg, um diese Ausnahmen zu behandeln?

UPDATE: Ich habe gerade den Fragetitel geändert: Zeitlimit für Formularauthentifizierung anstelle des anfänglichen Sitzungszeitlimits. Danke, dass Sie mir diesen Unterschied bewusst gemacht haben.

UPDATE: Ich habe gerade eine neue Frage mit dem spezifischen Problem erstellt, mit dem ich konfrontiert bin: Wie wird die Ausnahme aufgrund eines abgelaufenen Authentifizierungstickets mithilfe von UpdatePanel behandelt? . Überraschenderweise habe ich nicht viele Informationen darüber gefunden. Ich würde deine Hilfe sehr schätzen.


Wenn Sie die Formularauthentifizierung verwenden, wird der Benutzer auf die Anmeldeseite umgeleitet, wenn das Formularauthentifizierungsticket abläuft, was nicht mit dem Ablauf der Sitzung übereinstimmt.

Sie könnten in Erwägung ziehen, das Zeitlimit für die Formularauthentifizierung zu erhöhen. Sogar bis zu einem dauerhaften Cookie. Aber wenn es abläuft, gibt es keine echte Alternative zum Umleiten auf die Anmeldeseite - alles andere wäre unsicher.

Eine Möglichkeit, Session-Timeouts zu umgehen, besteht darin, Session als Cache zu verwenden und alles, was für einen Back-Store wie eine Datenbank wichtig ist, zu speichern. Überprüfen Sie dann, bevor Sie in Session auf etwas zugreifen und aktualisieren Sie es gegebenenfalls:

MyType MyObject
{
    get
    {
        MyType myObject = Session["MySessionKey"] as MyType
        if (myObject == null)
        {
            myObject = ... get data from a backing store
            Session["MySessionKey"] = myObject;  
        }
        return myObject;
    }
    set
    {
        Session["MySessionKey"] = value;
        ... and persist it to backing store if appropriate
    }
}

Wenn Sie eine Masterseite oder eine Basisseite verwenden, würde ich einem der Ereignisse im Seitenlebenszyklus Logik hinzufügen, um zu überprüfen, ob die Sitzung neu ist:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do whatever you need to do
    }
}






forms-authentication