none
Wenn Timeout auf Seite noch angemeldet RRS feed

  • Frage

  • Hi zusammen, ich habe in meinem Webserver (IIS 7 Win2008) ein Timeout nach 30 Minuten drin.
    Wenn jetzt einer eine Seite aufruft (hat sich vorher angemeldet) prüfe ich mit  (im Load Event) ob er noch angemeldet ist.
            If User.Identity.IsAuthenticated = False Then
                Response.Redirect("~/Default.aspx", False)
                Exit Sub
            End If

    Ich habe jetzt aber trotzdem das Phänomenen wenn einer die Seite angenommen 40 Minuten aufhat, denn ist das ganze verhalten als wenn er abgemeldet ist.

    Er aber wenn er einen Button klickt (hier wird div. ausgeführt ) kommt er in den Code ganz normal rein (obwohl ja im Loadevent auf IsAuthenticated geprüft wird)
    Ich muss doch im Code vom Buttonclick nicht nochmal prüfen, oder?

    Sonntag, 31. Oktober 2010 18:13

Antworten

  • Hi,

    Er aber wenn er einen Button klickt (hier wird div. ausgeführt ) kommt er in den Code ganz normal rein (obwohl ja im Loadevent auf IsAuthenticated geprüft wird)
    Ich muss doch im Code vom Buttonclick nicht nochmal prüfen, oder?

    das liegt (sehr wahrscheinlich) an deinem zweiten Parameter "False" beim Redirect. Schreib dort mal True rein, dann wird der Request beendet.

    Das, was hier passiert ist folgendes:

    • Request kommt rein
    • Page_Load wird aufgerufen
    • Du rufst Response.Redirect auf
    • Der Client erhält in diesem Moment eine entsprechende Rückgabe für die Umleitung
    • Der restliche Code für den gesamten Request wird ausgeführt


    Und genau das letzte ist das, was Du nun siehst.

    Mit Response.Redirect( "~/Default.aspx", True ) passiert das letztgenannte nicht, der Request bzw. Thread wird beim Redirect hart beendet. (Führt aber bspw. auch dazu, dass ggfs. noch offene Objekte existieren, bspw. Datenbankverbindungen, ...)

    Achte auch darauf, dass bei True eine ThreadAbortException geworfen wird. Diese kannst Du hier aber unbeachtet lassen (es sei denn, Du müsstest noch Aufräumarbeiten durchführen :)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sonntag, 31. Oktober 2010 18:37
    Moderator

Alle Antworten

  • Hi,

    Er aber wenn er einen Button klickt (hier wird div. ausgeführt ) kommt er in den Code ganz normal rein (obwohl ja im Loadevent auf IsAuthenticated geprüft wird)
    Ich muss doch im Code vom Buttonclick nicht nochmal prüfen, oder?

    das liegt (sehr wahrscheinlich) an deinem zweiten Parameter "False" beim Redirect. Schreib dort mal True rein, dann wird der Request beendet.

    Das, was hier passiert ist folgendes:

    • Request kommt rein
    • Page_Load wird aufgerufen
    • Du rufst Response.Redirect auf
    • Der Client erhält in diesem Moment eine entsprechende Rückgabe für die Umleitung
    • Der restliche Code für den gesamten Request wird ausgeführt


    Und genau das letzte ist das, was Du nun siehst.

    Mit Response.Redirect( "~/Default.aspx", True ) passiert das letztgenannte nicht, der Request bzw. Thread wird beim Redirect hart beendet. (Führt aber bspw. auch dazu, dass ggfs. noch offene Objekte existieren, bspw. Datenbankverbindungen, ...)

    Achte auch darauf, dass bei True eine ThreadAbortException geworfen wird. Diese kannst Du hier aber unbeachtet lassen (es sei denn, Du müsstest noch Aufräumarbeiten durchführen :)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sonntag, 31. Oktober 2010 18:37
    Moderator
  • Hi Stefan, habe ich eingebaut. Sieht gut im Moment aus :)
    Dienstag, 2. November 2010 07:26