在Asp.net MVC控制器上的XmlHTTPRequest / AJAX请求是否更新会话超时

时间:2014-04-14 10:11:31

标签: jquery asp.net-mvc

方案

我们有一个自动注销功能,可在4分钟左右后激活超时窗口。从web.config文件中的Authentication配置的FormsAuthentication元素检索超时值。 E.g:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="5" />
</authentication>  

JavaScript代码只有一个计时器,每隔一秒检查一次,以查看是否:

  1. 用户没有活动(鼠标点击或鼠标移动)和
  2. 如果没有,请检查是否已经过了5分钟(或更确切地说是4分30秒)。如果有,那么,
  3. 它显示一个从30秒倒计时的弹出窗口,让用户可以单击“继续”以停止自动注销,或者如果保持不变,则会自动将用户注销并将其重定向回登录页面。
  4. 以下是在客户端运行以扩展会话的代码示例:

    $.ajax({
        type: "GET",
        url: alchemy.rootPath + "Account/TimeOutExtend"
    });
    

    被调用的控制器操作不执行任何操作:

    public ActionResult TimeOutExtend()
    {
        return (ViewBag.None);
    }
    

    问题

    当我们让弹出窗口停止运行大约5秒钟然后单击按钮继续会话时,用户仍然会被注销。
    这似乎来自服务器端而不是客户端上的任何东西。

    问题

    对于当前用于扩展用户会话的MVC控制器的XmlHTTPRequest AJAX请求是否有可能实际上没有扩展会话,因为MVC以某种方式处理Ajax请求的方式不同?

1 个答案:

答案 0 :(得分:1)

我认为会话不会在以下两种情况之一的MVC中扩展

1)发送的请求是跨域请求(CORS)
2)不知何故,用户信息(会话cookie)不会与ajax调用一起发送到服务器