2012-12-25 19 views
6

Ich habe eine Anwendung, wo etwa 20 http generic handler für ajax call verwendet werden.
Ich habe IReadOnlySessionState für den Zugriff auf die Sitzung in meinem Handler verwendet. Alles funktioniert gut.
Handle Session Timeout in generischen http-Handler

Wenn die Sitzung abläuft, gibt mein Handler jedoch etwas html zurück, da es auf die Standardseite umleitet und die HTML-Seite der Standardseite in der Antwort zurückgesendet wird.

Um dieses Problem zu beheben.
Ich habe die Session-Variable in der Prozedur überprüft und wenn es null die ich habe

geschrieben
context.Response.Write("logout") 

Und ich überprüfen, in jQuery Ajax-Wetter ist es logout oder irgendetwas anderes.

$.ajax({ 
      url: "myhandler.ashx", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { checklogout(data); $("#loading").hide(); }, 
      error: function() { $("#loading").hide(); }, 
      async: false 
     }); 


Wenn es Logout wird dann ich Standort verwendet haben, um zu umleiten Seite einzuloggen.
Ich benutze form-authentication Benutzer zu authentifizieren.

Gibt es einen besseren Ansatz für die Überprüfung und Umleitung auf die Anmeldeseite mit jquery-ajax Aufruf.

+1

Es wäre wahrscheinlich besser, um einen ordnungsgemäßen [HTTP-Statuscode] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) wie * 401 Unauthorized * von Ihrem Handler zurückzugeben (und vielleicht einen einzelnen Basishandler zu erstellen, damit du wiederholst die Logik nicht). Sie können diesen Wert in Ihren zentralen AJAX-Optionen ('$ .ajaxsetup') suchen, damit der zu überprüfende Code nur an einer Stelle abläuft. Geht das nach dem, was Sie suchen? –

Antwort

2

Sie haben Ihre Handler in einem Verzeichnis, das automatisch durch die Authentifizierung von asp.net kontrolliert.

Was ich tun soll, ist nicht automatisch durch die asp.net-Authentifizierung durch Setup, dass auf web.config so den Aufruf an den Handler Ether Ether-Benutzer nicht eingeloggt ist, und in den Handler ich werde Überprüfen Sie, ob der Benutzer, der diesen Handler aufruft, die Sitzung und die Authentifizierung hat.

dann in dem Fall, dass der Benutzer die Authentifizierung hat, dass Handler liest ich eine einfache Fahne meines Ajax-Aufruf zurück, dann erkennen und Umleitung machen, zB als:

$.ajax({ 
    url: "myhandler.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) 
    { 
     if(data.redirectToLogin == true) 
     { 
      window.location = "/login.aspx" 
     } 
     else 
     { 
      // do the rest job 
     } 
    }, 
    error: function() 
    { 
     $("#loading").hide(); 
    } 
}); 
+0

Scheint eine gute Idee zu sein. Aber wenn 'data' nicht die Eigenschaft' redirectToLogin' hat, gibt es eine 'java-script' Ausnahme oder nicht. Auch wenn ich '' in meiner webconfig Datei verwende, wird es eine Sicherheitsbedrohung geben, obwohl ich die Benutzersitzung innerhalb des gesamten Handlers überprüfen werde. –

+1

@krshekhar Sie können einfach eine Zeichenfolge wie "ko" oder andere Flagge zurückgeben, das ist einfach zu lösen. – Aristos