可以从javascript / jquery返回url?

时间:2009-11-09 21:56:03

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

我遇到一个问题,当用户在我的网站上超时时,他们仍然登录。所以他们仍然可以执行ajax请求。如果他们在我的网站上做了一个ajax请求,我的asp.net mvc授权标签就会停止这个。

如果授权失败,则授权通常会将用户重定向回登录页面。

现在因为这是一个ajax请求,似乎正在发生的是它将整个页面重新呈现为html。因此,用户永远不会重定向,因为我只是将整个页面作为html发送给我。

然而,firebug在控制台中说:

http://localhost:3668/Account/signIn?ReturnUrl="return“(这不在网络浏览器的实际网址栏中,所以我不能去那里得到它。我似乎只能通过萤火虫看到它。)

所以我不确定,但也许我可以以某种方式从我的errorCallback区域内抓取这个网址,这将是很棒的。

由于我的测试没有发回错误代码(发送200 OK)。相反,我只是得到解析错误(因此调用errorCallback的原因)但我不能假设每次我得到解析错误都意味着用户超时。

我需要更好的东西。唯一的另一个选择是查看响应并查找关键作品,看看是否是登录页面,我认为这不是很好的做法。

4 个答案:

答案 0 :(得分:2)

您可能想要做以下两件事之一:

  • 编写服务器代码,以便 ajax 请求在会话过期时返回ajax错误。这样javascript就会产生一个表示会话超时的返回码,你可以告诉用户会话已过期。
  • 如果由于你的框架处理这些东西而没有一个优雅的解决方案,只需在你的登录页面中放入一大块HTML评论,如Uth7mee3或其他东西;然后检查你的ajax代码中是否存在该字符串。

另外,您还可以在网页上设置一个计时器,用于计算会话即将结束的时间,以及警告用户,并提供一条消息,让他们续订会话。一旦超时,将页面空白并为其提供再次登录的链接。

答案 1 :(得分:1)

如何在登录页面中添加脚本

if(document.location.href != "/Account/Login")
{
document.location.href = "/Account/Login"
}

如果您尝试在ajax请求中渲染部分,这将有效。  (如果你期待json,那就没有了)

答案 2 :(得分:0)

在这种情况下,响应的状态代码是什么?我想你应该能够在这里查看302。如果没有,Location标题将成为检查登录页面的下一个最佳方式。

答案 3 :(得分:0)

这不是您具体问题的答案,但我处理此问题的方法是让一些client-side code了解会话长度并提示用户在会话之前续订会话如果他们没有离开页面就准备好了。如果用户没有及时响应提示,则会调用该站点的注销操作 - 将用户带到登录页面。

您可以在我的博客上找到有关确切实施的更多信息,包括一些代码:http://farm-fresh-code.blogspot.com