会话在第二次ajax调用时清除

时间:2015-06-29 06:03:11

标签: jquery ajax asp.net-mvc session

这里我的问题有点奇怪,我只在生产服务器上遇到它。基本上我在第二次ajax调用时松开了会话值。整个过程就像用户单击一个按钮来启动同步过程,其中涉及两个ajax命中,第一个是post请求,并且成功完成了第二个get请求。

我的代码如下:

jQuery代码:

//User clicks "SyncButton" to initiate sync process
    $('#SyncButton').on('click', function (event) {
        //Some UI Code
        $.ajax({
            type: 'POST',
            beforeSend: startService,   //startService has some UI code
            url: "FirstAjaxURL",
            data: null,
            contentType: "application/json",
            success: function (data) {
                ServiceSuccess(data);
            },
            error: serviceError
        });
    });

function ServiceSuccess(data) {
    var html = ''; //code to get html from data
    $('#divSync').html(html);
    if (!($('#delete').length > 0)) {
        RenderBusinessGrid();
    }
};

function RenderBusinessGrid() {
    var allBusiness = "";
    $.getJSON("SecondAjaxURL", function (data) {
        //Some UI handling code
    });
    $('#divSyncDetails').height('400px');
}

MVC代码:

[HttpPost]
public string FirstAjaxURL()
{
    //make some DB hits
    //fetch data
    //create couple of zip files

编辑2015年7月6日

    //Unzip a zip file in one of the sub-directories. This zip file contains multiple sub-directories and files.

编辑2015年7月6日

    //save them in two separate folders in separate folders under root directory

    /*LOGS SUGGEST ALL SESSION KEYS WERE AVAILABLE HERE*/
    return "some string result";
}

public ActionResult SecondAjaxURL()
{
    /*LOGS SUGGEST SESSION KEYS NOT AVAILABLE HERE*/

    //do some DB operation 
    return jsonResult;
}

到目前为止我所做的一切:

  1. 检查应用程序池回收时间的IIS设置,它们似乎没问题
  2. 会话超时设置为较大值,如果我让系统空闲
  3. ,则不会超时
  4. 确认在第一次ajax hit
  5. 中没有未处理的异常
  6. 尝试将zip文件保存在应用程序的目录结构之外
  7. 尝试用$ .ajax替换$ .getJson(我知道尝试这个是愚蠢的,但你永远不知道......)。
  8. 注意:在大多数情况下,第二次ajax上的会话超时会在用户首次启动同步过程时调用。虽然我们观察到很多情况,这种情况发生在第二次或第三次。

    一些进一步的细节: 我检查了事件日志,发现每次注销时都会在事件查看器中记录错误:

    事件代码:4005 事件消息:请求的表单身份验证失败。原因:提供的故障单无效。

    请建议我还有什么可以尝试/验证来解决这个问题的根本原因,这让我很烦恼。欢迎所有指针。

    谢谢, 拉维

2 个答案:

答案 0 :(得分:1)

几年前我遇到过类似的问题。 我遇到的问题类似于What could cause an asp.net application to forget a user?

关键在于作者自己的答案: 问题似乎是应用程序池正在回收,并且身份验证cookie变得无效,因为在机器密钥已更改时无法再读取它。解决方案是将machineKey段添加到web.config并提供静态机器密钥。

答案 1 :(得分:0)

我的问题简述:在第一个ajax中执行了一些操作,其中包括添加/更新多个文件/文件夹和第二个ajax命中,一旦由于会话变量不可用而首次到达客户端失败的结果就会启动。

根本原因:文件更改通知(FCN)行为

解决方案:在我的情况下,我最终移动了culprit文件夹,其中所有文件/文件夹更改都发生在Web应用程序之外。由于我需要从Web应用程序直接访问此文件夹的文件,因此我最终将此文件夹作为虚拟目录。

所以以前就像这样

enter image description here

现在它看起来像我的实际资产文件夹位于我的webapp之外,它有自己的虚拟目录和单独的应用程序池,可以搞乱:)

enter image description here

注意:我尝试使用FCNMode web.config设置,这似乎对.NET 4.5上的某些用户有用,但不幸的是它对我没用。如果您遇到类似问题,我建议您先尝试该设置。