【问题标题】:How can I redirect a user back to signout page when timed out? Asp.net MVC超时时如何将用户重定向回注销页面? ASP.NET MVC
【发布时间】:2009-11-09 22:00:03
【问题描述】:

我有很多用户使用 ajax(jquery) 的网站。现在,如果用户因任何原因超时(走了 30 分钟或其他时间)。在接下来的操作中,我希望它们返回到登录页面。

我在 webconfig 中设置了所有内容(returnUrl 和超时),如果他们尝试访问一个页面,他们没有权限访问,他们会被发送到登录页面。

但是,我在控制器中用于 ajax 请求的方法上有授权标签。因此,如果用户超时,他们将不再经过身份验证,但他们可能在登录并离开后正在进行所需的身份验证。

现在他们可以尝试保存一些可以执行 ajax 请求的内容。授权标签将阻止他们这样做,因为他们将失败授权并且返回 url 将启动。

但是,尽管返回 url 似乎被发送回给他们,但它们并没有被重定向到登录页面。所以我猜,因为所有这些东西都是 ajax,所以它不能正常工作。那么我可以解决这个问题吗?

【问题讨论】:

    标签: c# .net asp.net asp.net-mvc


    【解决方案1】:

    您需要检查 403 响应的 Ajax 错误

    【讨论】:

    • 好吧,实际上我似乎得到了 200 OK,但是如果我设置了一个 Jquery Ajax.Error,它会转到错误方法。但不知道如何检查它是否是 403 错误。
    • 另外,如果这行得通,这只能解决一半的问题。因为我有 ajax 选项卡,如果身份验证失败会发生什么。它将登录页面加载到选项卡中。
    【解决方案2】:

    使用 setTimeout 每 30 秒运行一次客户端函数,该函数应通过 AJAX 询问服务器会话是否已超时。如果有,客户端代码可以丢弃任何登录 cookie 并重定向到登录页面。

    您可以将登录 url 硬编码到客户端代码中,或者如果需要超时,则让服务器处理程序从 web.config 返回值。

    这仍然存在用户可以在用户实际超时和客户端代码执行其请求检查之间的 0-30 秒内尝试某些操作的可能性。为了防止这种情况,让服务器发回会话中剩余的时间,这样你的客户端代码可以决定要么尽快再次检查,要么在服务器端之前进行客户端重定向死机时间。

    【讨论】:

    • 你能给我写一个简短的相同代码吗?我不知道如何让它运行 30 秒,也不知道 setTimeout 是什么。这是一个jquery函数吗? javascript函数?
    • 嗨,Chobo,Rasik 再次......这是我的朋友和同事编写的关于自动注销的示例代码链接......看看它......firozansari.com/2009/05/15/…跨度>
    • 如果有多个人使用它,这可能会破坏服务器。
    • Rasik Jain 提供的链接很好,尽管值得注意的是它假设客户端对何时强制注销具有权威性。如果服务器需要具有权威性,那么如果客户端和服务器不同意,仍然可能会出现问题。当然,在服务器端,您可以(并且应该)在执行客户端操作之前始终检查登录是否仍然有效。
    • 我不确定我是否关注你,大卫。我不确定客户端和服务器如何不同意,即使他们不同意,我也会接受服务器所说的任何内容,因为它每次访问服务器时都会检查用户凭据。那么您能否更详细地解释您的意思?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多