Cookie正在删除

时间:2017-12-06 15:37:32

标签: jquery asp.net ajax cookies

我有一个asp.net mvc应用程序,我发生了这个奇怪的事情,我不知道为什么。

背景:

我有一个允许用户绘制和编辑图像的页面。这个页面有一个功能,每5分钟,她使用 jquery 对服务器进行ajax调用,在数据库上保存项目的当前状态,另一个调用保存项目的图像是存放在适当的地方。

问题:

在浏览器最小化的情况下,启动此功能后,在ajax调用服务器后, cookie 客户已删除。但是当镀铬最大化时,这样可以正常工作。

备注:

  1. 仅在浏览器最小化时才会发生
  2. 这种情况至少发生在chrome和firefox中。
  3. 这只发生在生产环境中。在我的本地机器和visual studio上,我无法重现这个问题
  4. asp.net会话cookie是mantainned
  5. 我知道您很难仅仅提供这些信息,但是,如果您能提供线索,那将非常有帮助。我试图揭露问题,以便我们可以匹配类似的问题,为这种情况找到最佳解决方案。

    提前谢谢

    [编辑]

    我有一些关于这个问题的新内容:

    1. 使用Chrome版本63.0.3239.84(官方版本)(64位);
    2. Firefox quantum 57.0(64位);
    3. 与我首先想到的相反,即使浏览器没有最小化,并且在页面加载后精确3分钟(如果我调用该函数),也会发生这种情况。
    4. Cookie未被删除,但Cookie的内容为: enter image description here
    5. 这是一个asp.net Web应用程序
    6. 控制台没有出现任何错误
    7. 查询版本为2.1.3
    8. 关注jquery来电代码:

      makeAjaxCall(ajaxData) {
      var localData = ajaxData.data ? ajaxData.data : {},
          urlVariables = {};
      
      localData.cmd = ajaxData.cmd;
      
      var controlerURL = ajaxData.uploadUrl ? HelperJSViewBag.getValue("ajaxCAllUploadURL") : ajaxData.controller;
      
      if (typeof ajaxData.data.urlVariables == "undefined")
          ajaxData.data.urlVariables = [];
      
      let editorVersion = "";
      let forceEditorVersion = "";
      
      if (typeof UrlParameters != "undefined") {
          editorVersion = UrlParameters.getInstance().editorVersion;
          forceEditorVersion = UrlParameters.getInstance().forceEditorVersion;
      }
      else if (typeof HLinks != "undefined") {
          editorVersion = HLinks.getUrlVariable("editorVersion");
          forceEditorVersion = HLinks.getUrlVariable("forceEditorVersion");
      }
      
      if (editorVersion.length > 0)
          ajaxData.data.urlVariables.push({
              name: "editorVersion",
              value: editorVersion,
          });
      
      if (forceEditorVersion.length > 0)
          ajaxData.data.urlVariables.push({
              name: "forceEditorVersion",
              value: forceEditorVersion,
          });
      
      if (typeof ajaxData.data.urlVariables != "undefined" && ajaxData.data.urlVariables.length > 0)
          for (var i = 0; i < ajaxData.data.urlVariables.length; i++)
              urlVariables[ajaxData.data.urlVariables[i].name] = ajaxData.data.urlVariables[i].value;
      
      localData = this.fillLocalData(localData);
      
      return $.ajax({
          type: 'POST',
          data: localData,
          url: controlerURL + "?" + $.param(urlVariables),
          success: function (data) {
              try {
                  var result = JSON.parse(data),
                      status = result.status;
      
                  delete result.status
                  switch (status) {
                      case 1: ajaxData.sucess && ajaxData.sucess(result.data); break;
                      case 2: ajaxData.insucess && ajaxData.insucess(ajaxData.errorHandler && ajaxData.errorHandler.handle && ajaxData.errorHandler.handle(result)); break;
                  }
              }
              catch (ex) {
                  ajaxData.insucess && ajaxData.insucess(ajaxData.errorHandler && ajaxData.errorHandler.handle && ajaxData.errorHandler.handle(ex));
              }
          },
          error: function (data) {
              ajaxData.insucess && ajaxData.insucess(ajaxData.errorHandler && ajaxData.errorHandler.handle && ajaxData.errorHandler.handle(data));
          }
      });
      }
      

2 个答案:

答案 0 :(得分:0)

我想在ASP.NET端看到你的代码,但没有它,我只能猜测:或许检查一下你是否设置了cookie过期日期?以下是使用1天到期创建的Cookie的示例:

Dim myCookie As HttpCookie = New HttpCookie("Customer")
myCookie.Expires = Now.AddDays(1)
Response.Cookies.Add(myCookie)

如果省略myCookie.Expires属性,则cookie&#34;将在用户会话到期时过期&#34;,ref。 https://msdn.microsoft.com/en-us/library/78c837bd.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

答案 1 :(得分:0)

  1. 您可以增加Cookie的到期时间(在您创建Cookie的代码中)。

  2. 您可以在代码中使用localStorage而不是Cookie来保存值。

  3. 为检验localStorage.setItem设置值,localStorage.getItem从本地存储中获取值。