【问题标题】:Best way to handle expired .NET Forms authentication coookie in an ajax call?在 ajax 调用中处理过期的 .NET Forms 身份验证 cookie 的最佳方法?
【发布时间】:2009-09-02 11:20:11
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序,我想知道哪种方法是处理在 ajax 调用期间检测到的过期 .NET Forms 身份验证 cookie 的最佳方法。

您认为将 ajax 响应打包到包含有关 cookie 有效性信息的 JsonResult 中是最佳解决方案吗?

【问题讨论】:

    标签: asp.net asp.net-mvc ajax json authentication


    【解决方案1】:

    我的首选方法是弹出一条消息说会话已过期,然后重定向到登录页面,登录后将恢复到当前页面。

    【讨论】:

    • 这也是最简单/最安全的方法。
    【解决方案2】:

    人们可能会对此非常感兴趣。如果 onError 上的 AJAX 是无效会话,则弹出一个模式弹出窗口(灯箱表单),其中包含您的登录视图。允许用户从模式登录,然后他们不会丢失任何表单数据并且不会在您的整个站点上重定向。然而,最有可能的是,他们需要尝试重新发布他们的数据。可能需要做一些事情,但最终,我认为它对最终用户来说更加无缝。

    PS - 我在想 Digg.com 类型的登录界面。点击添加评论,弹出模态框。

    【讨论】:

    • 如果您使用此方法,请确保请求通过 HTTPS 连接,就像所有登录一样。其中,如果您的主页不是 HTTPS,那么您将不得不在 JS 中解决同源策略。
    • 我同意HTTPS,但使用Lightbox,我认为您不必担心同源问题。您正在调用一个实际的网页以打开一个 IFrame,填写表格,发布表格,.NET 设置 cookie。两个页面之间没有 JS 调用,这就是为什么一旦从 IFramed 登录页面设置 cookie 就必须重新提交表单的原因。现在,如果您想使用同源,那么您可以在成功登录后自动提交表单。
    【解决方案3】:

    不确定您使用的是哪个 ajax 框架,但大多数(包括 asp.net ajax)通过让您指定 onError 函数来处理服务器异常。

    Namespace.Object.Method(var1, var2, onSuccess, onError) { .. } etc..

    如果你让 asp.net 管理会话,并且只要有问题的页面只对经过身份验证的用户启用,框架就会在过期时抛出无效会话异常(我忘了具体是哪个)

    在 onError 中,您可以检查异常类型,并重定向到登录页面。事实上,您所要做的就是重新加载当前页面,.net 会将其重定向到您的登录页面。文档.location.href = 文档.location.href; (这将重新加载当前页面,忽略提交的表单数据(如果有))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      相关资源
      最近更新 更多