【问题标题】:Extending Forms Authentication Timeout When Making AJAX Calls With jQuery使用 jQuery 进行 AJAX 调用时延长表单身份验证超时
【发布时间】:2010-09-28 00:56:19
【问题描述】:

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

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

任何 cmets\help 将不胜感激。

【问题讨论】:

  • 这里有一个blog post 可能会有所帮助。

标签: asp.net jquery ajax asp.net-ajax forms-authentication


【解决方案1】:

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

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

【讨论】:

  • 它将延长会话,但不一定是表单身份验证超时 - 据我了解,这似乎已被我使用保活的当前问题所证实,这是两件不同的事情。使用keep-alive,我的会话确实延长了,但表单身份验证超时仍然发生。
  • 我也遇到过表单身份验证票证到期不会通过 Ajax 调用延长,即使 Ajax 调用扩展了服务器端会话。
  • 我已经验证从 JavaScript 或 jQuery 调用静态 PageMethod 或启用 ajax 的 Web 服务确实扩展了表单身份验证票证 provided sliding expiration is set to true。如果在 web.config 中将滑动过期设置为 false,则调用此类方法不会扩展表单身份验证票证。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我将它用于我的 keepalive 网络服务。 根据您的喜好修改它,让我知道它是否有效...... 注意: 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
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          例子:

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

          【讨论】:

          • 该应用是一个使用表单身份验证的 ASP.NET。在传统的 ASP.Net 中,FormsAuth 票证在回发时扩展。如果我使用的是 AJAX,那么我不会进行完整的回发,如果我不明确地这样做,这张票将永远不会被延长(至少我认为,因此问题)
          猜你喜欢
          • 2014-04-01
          • 1970-01-01
          • 2012-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-22
          • 2014-05-25
          • 1970-01-01
          相关资源
          最近更新 更多