2008-12-22 54 views
10

我正在尋找重寫一個非常密集的CRUD類型的ASP.NET頁面以利用ajax調用(特別是jQuery ajax)。我這樣做的關鍵是用戶可能在此頁面上的時間超過了表單身份驗證超時。正因爲如此,我認爲我應該使用每個Ajax調用來擴展表單身份驗證票據(基本上它是如何在正常的Web表單提交模型中進行的)。所以問題:使用jQuery進行AJAX調用時擴展表單身份驗證超時

這是一個有效的關注嗎?如果是這樣,會寫一個jQuery插件來擴展表單身份驗證超時是可能的嗎?一個已經存在嗎?將使用ASP.NET AJAX是一個更好的方法?

任何意見\幫助將不勝感激。

+0

這裏是一個[博客文章(http://weblogs.asp.net/traviscollins/archive/2008/02/22/ajax-timeout-server-control.aspx)這可能有幫助。 – sjb101 2009-10-16 11:44:08

回答

8

我可以確認,通過jQuery 進行網絡服務或頁面方法調用,將以與常規回發相同的方式延長ASP.NET會話到期。

我經常使用五分鐘的setInterval()來調用一個「保持活動」服務,即使他們離開應用程序空閒,也會無限期地保留用戶的會話。

+9

它會延長會話,但不會必要的表單身份驗證超時 - 據我瞭解,這似乎證實了當前問題,我使用保持活着,這些是兩個不同的事情。使用保持活動,我的會話確實被擴展,但表單身份驗證超時仍然發生。 – sydneyos 2011-03-11 01:33:11

0

我不認爲我完全理解你在問什麼,但在jquery ajax超時方面,你可以在ajax調用中設置本地超時。

例子:

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

該應用程序是使用表單身份驗證的ASP.NET。在傳統的ASP.Net中,FormsAuth票證在回發時被擴展。如果我使用的是AJAX,那麼我沒有做一個完整的回發,並且如果我沒有明確地做這個票,這張票永遠不會被延長(至少我認爲,因此問題) – Godless667 2008-12-22 20:07:24

0

使用Fiddler或其他一些工具來看看微軟很聰明​​,以確保得到AJAX之間更新cookie的要求。如果你使用微軟的asp.net AJAX(大致相似),你可能會有更好的運氣(關於自動更新表單auth tickeet)。

1

您應該可以在不使用腳本管理器的情況下使用MS Ajax,並使用jQuery來使用WebMethods。更多信息這樣做here

據我所知,調用WebMethod會延長用戶的會話超時時間。所以這種方法可能是兩全其美的。

0

表單驗證通過cookie工作。 Cookies與XMLHttpRequest請求一起發送,所以我認爲這裏沒有問題。

請注意,有與FormsAuthTicket到期有關的問題,並被迫重定向到login.aspx或其他一些問題。但這與你所談論的完全不同。

1

我使用它作爲我的keepalive webservice。 修改此項以符合您的喜好,並讓我知道它是否有效... 注意:session(「UID」)是我在登錄時設置的變量。我的名字我的票相同

<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 
相關問題