12

我希望重写一个非常密集的 CRUD 类型的 ASP.NET 页面以利用 ajax 调用(特别是 jQuery ajax)。我这样做的担心是用户在此页面上的停留时间可能比表单身份验证超时时间长。正因为如此,我认为我应该使用每个 ajax 调用来扩展表单身份验证票证(基本上它在普通 Web 表单提交模型中的作用)。所以问题:

这甚至是一个有效的担忧吗?如果是这样,是否可以编写一个 jQuery 插件来延长表单身份验证超时?是否已经存在?使用 ASP.NET AJAX 会是更好的方法吗?

任何评论\帮助将不胜感激。

4

6 回答 6

8

我可以确认,通过 jQuery 进行 Web 服务或页面方法调用延长 ASP.NET 会话到期时间,其方式与常规回发相同。

我经常使用五分钟的 setInterval() 来调用“keep-alive”服务,即使他们让应用程序空闲,它也会无限期地保留用户的会话。

于 2008-12-23T19:08:58.253 回答
1

您应该能够在没有脚本管理器的情况下使用 MS Ajax,并使用 jQuery 来使用 WebMethods。更多信息在这里这样做

据我所知,调用 WebMethod 会延长用户的会话超时时间。所以这种方法可能是两全其美的。

于 2008-12-23T14:41:46.483 回答
1

我将它用于我的 keepalive 网络服务。根据您的喜好修改它并让我知道它是否有效... 注意:会话(“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
于 2011-08-29T14:15:32.313 回答
0

使用 Fiddler 或其他一些实用程序来查看 Microsoft 是否足够聪明,以确保 cookie 在 AJAX 调用之间得到更新。如果您使用 Microsoft 的内置 asp.net AJAX(基本相似),您可能会有更好的运气(关于自动更新表单 auth ticket)。

于 2008-12-22T23:15:18.770 回答
0

表单身份验证通过 cookie 工作。Cookie 是通过 XMLHttpRequest 请求发送的,所以我认为这里没有问题。

请注意,有一个与 FormsAuthTicket 到期相关的问题,并被强制重定向到 login.aspx 或类似的东西。但这与您所说的情况完全不同。

于 2008-12-23T15:05:01.507 回答
-1

我不认为我完全理解你在问什么,但就 jquery ajax 超时而言,你可以在 ajax 调用中设置本地超时。

例子:

$.ajax('ajax.php',{timeout: 60000},function (data) {
alert(data);
}
于 2008-12-22T18:51:23.920 回答