Beim Aufruf einer Funktion von ajax. Der Programmablauf erkennt die abgelaufene Sitzung nicht, d. H. Nicht zur Anmeldeseite umgeleitet. Stattdessen speichert es den Rekord. Ich arbeite in c # .net mvc. Wie kann ich Session während Ajax Call behandeln. Hier habe ich meine Codes gegeben.
%Vor%Hier der Controller
%Vor% Das Ergebnis Ihres AJAX-Aufrufs wird wahrscheinlich immer noch erfolgreich erscheinen (obwohl, keine Sorge, es wird Ihre Aktionsmethode nicht ausführen) und rufen Sie Ihren success
-Handler auf. Dies liegt daran, dass Sie HTML erwarten, und das ist es, was Sie erhalten (obwohl der resultierende HTML-Code wahrscheinlich Ihre Anmeldeseite und nicht der von Ihnen gewünschte HTML-Code ist). Nebenbei, wenn Sie JSON (mit dataType:'JSON'
) erwarteten, würde dies einen Fehler auslösen, da HTML als JSON analysiert würde.
Sie müssen verhindern, dass FormsAuth die Anmeldeseite für AJAX-Anforderungen umleitet. % Co_de% gibt nun treu eine AuthorizeAttribute
zurück, die eine HTTP 401 Not Authorized-Antwort an den Client sendet, was ideal für Ihren AJAX-Client ist.
Das Problem besteht darin, dass das FormsAuth-Modul den StatusCode überprüft und wenn es 401 ist, führt es die Umleitung durch. Ich habe dieses Problem auf diese Weise bekämpft:
1) Erstelle meinen eigenen Derivat-Typ von NotAuthorizedResult
, der ein Flag in AuthorizeAttribute
setzt, um mir mitzuteilen, dass die Autorisierung fehlgeschlagen ist, und ich sollte eine 401 anstelle einer Weiterleitung erzwingen:
2) Fügen Sie Ihrem Global.asax.cs hinzu:
%Vor%3) Fügen Sie Ihrem jQuery AJAX-Setup einen statusCode-Handler hinzu:
%Vor% 4) Ändern Sie die Controller oder Aktionen, für die dieses Verhalten verwendet werden soll, mit HttpContext.Items
bis AuthorizeAttribute
:
Ich möchte Ihnen vorschlagen, StatusCode = 306 zu verwenden. Ich habe ein Problem bei der Verwendung von 401.IIS behandelt 401 anders als ich verstehe. 306 funktioniert gut für mich.
Grüße.
Tags und Links asp.net-mvc c# session-timeout