2008-12-22 2 views
10

Ich bin auf der Suche nach einer ziemlich intensiven CRUD-Typ ASP.NET-Seite, um Ajax-Aufrufe (speziell jQuery Ajax) zu verwenden. Meine Sorge dabei ist, dass der Benutzer möglicherweise auf dieser Seite länger als die Formularauthentifizierung Zeitüberschreitung ist. Aus diesem Grund denke ich, dass ich das Formularauthentifizierungsticket mit jedem Ajax-Aufruf erweitern sollte (im Grunde wie es in einem normalen Webformular-Übermittlungsmodell funktioniert). Also die Fragen:Erweitern der Formularauthentifizierung Timeout beim Erstellen von AJAX-Anrufe mit jQuery

Ist das überhaupt ein berechtigtes Anliegen? Wenn ja, wäre das Schreiben eines jQuery-Plugins möglich, um das Zeitlimit für die Formularauthentifizierung zu verlängern? Gibt es einen schon? Wäre die Verwendung von ASP.NET AJAX ein besserer Ansatz?

Alle Kommentare \ help würde geschätzt werden.

+0

Hier ist eine [Blog-Post] (http://weblogs.asp.net/traviscollins/archive/2008/02/22/ajax-timeout-server-control.aspx) das könnte helfen. – sjb101

Antwort

8

Ich kann bestätigen, dass das Erstellen einer Webdienst- oder Seitenmethodenaufruf über jQuery ein ASP.NET-Sitzungsablauf auf die gleiche Weise wie ein reguläres Postback verlängern wird.

Ich benutze oft eine fünf Minuten setInterval(), um einen "keep-alive" -Dienst aufzurufen, der die Sitzung des Benutzers auf unbestimmte Zeit erhält, auch wenn sie die Anwendung im Leerlauf lassen.

+9

Es wird die Sitzung verlängern, aber nicht unbedingt das Timeout der Formularauthentifizierung - wie ich es verstehe, und dies scheint durch eine aktuelle Frage, die ich mit einem Keep-Alive, bestätigt, das sind zwei verschiedene Dinge.Mit der Keep-Alive-Funktion wird meine Sitzung zwar verlängert, aber das Zeitlimit für die Formularauthentifizierung tritt immer noch ein. – sydneyos

+2

Ich habe auch erfahren, dass das Ablaufdatum von Forms Authentication Ticket nicht mit Ajax-Anrufen verlängert wird, obwohl Ajax-Aufrufe die serverseitige Sitzung erweitern. –

+0

Ich habe überprüft, dass das Aufrufen eines statischen PageMethod- oder Ajax-aktivierten Webdienstes von JavaScript oder jQuery das Formularauthentifizierungsticket erweitert, vorausgesetzt, das gleitende Ablaufdatum ist auf "true" gesetzt. Wenn das gleitende Ablaufdatum in der Datei "web.config" auf "false" gesetzt ist, wird das Formularauthentifizierungsticket beim Aufrufen einer solchen Methode nicht erweitert. – Sunil

0

Ich glaube nicht, dass ich vollständig verstehe, was Sie fragen, aber in Bezug auf die JQuery Ajax Timeout, können Sie die lokale Zeitüberschreitung in der Ajax-Anruf festlegen.

Beispiel:

$.ajax('ajax.php',{timeout: 60000},function (data) { 
alert(data); 
} 
+0

Die App ist ein ASP.NET, das Formularauthentifizierung verwendet. Im herkömmlichen ASP.Net wird das FormsAuth-Ticket beim Postback erweitert. Wenn ich AJAX verwende, dann mache ich kein komplettes Postback und dieses Ticket wird nie verlängert, wenn ich es nicht explizit mache (zumindest denke ich, daher die Fragen) – Godless667

0

Verwendung Fiddler oder ein anderes Dienstprogramm, um zu sehen, ob Microsoft klug genug war, um sicherzustellen, das Cookie zwischen AJAX aktualisiert wird aufruft. Möglicherweise haben Sie mehr Glück (in Bezug auf die automatische Aktualisierung der Formulare Auth Tickeet), wenn Sie Microsofts eingebranntes asp.net AJAX verwenden (die im Wesentlichen ähnlich ist).

1

Sie sollten MS Ajax ohne den Skript-Manager verwenden können und jQuery verwenden, um die WebMethods zu konsumieren. Weitere Informationen finden Sie hier here

Soweit ich weiß, wird das Aufrufen eines WebMethod das Sitzungstimeout des Benutzers verlängern. Dieser Ansatz kann also das Beste aus beiden Welten sein.

0

Formulare Auth funktioniert über einen Cookie. Cookies werden mit XMLHttpRequest-Anfragen gesendet, daher glaube ich nicht, dass hier ein Problem besteht.

Beachten Sie, dass dort ist ein Problem im Zusammenhang mit der FormsAuthTicket abläuft, und gezwungen, um zu login.aspx oder einige solcher umleiten. Aber das ist ein ganz anderes Szenario als das, worüber Sie sprechen.

1

Ich benutze dies für meinen Keepalive Webservice. Ändern Sie dies nach Ihren Wünschen und lassen Sie mich wissen, wenn es funktioniert ... Hinweis: Sitzung ("UID") ist eine Variable, die ich bei der Anmeldung eingerichtet. Ich nenne mein Ticket die gleiche

<WebMethod(CacheDuration:=0, EnableSession:=True)> _ 
Public Function keepSessionAlive() As String 
    If Session("UID") Is Nothing OrElse Session("UID") = 0 Then 
     Throw New ApplicationException("Login") 
    End If 

    Session("lastKeepSessionAlive") = DateTime.Now 

    If Not (Context.Request.Cookies(System.Web.Security.FormsAuthentication.FormsCookieName) Is Nothing) Then 
     Dim ticket As System.Web.Security.FormsAuthenticationTicket 
     Try 
      ticket = System.Web.Security.FormsAuthentication.Decrypt(Context.Request.Cookies(System.Web.Security.FormsAuthentication.FormsCookieName).Value) 
      If ticket.Name = Context.Session("UID") Then 
       System.Web.Security.FormsAuthentication.SetAuthCookie(Context.Session("UID"), False) 
       Debug.WriteLine("keepAlive:AuthenticationReset") 
      End If 
     Catch ex As Exception 
      Debug.WriteLine("keepAlive:AuthenticationReset FAILED!!!") 
      Throw New ApplicationException("Login") 
     End Try 
    Else 
     Debug.WriteLine("keepAlive.Load: No Authentication Cookie. Error") 
     Throw New ApplicationException("Login") 
    End If 

    Return Session.SessionID.ToString 
End Function 
Verwandte Themen