【问题标题】:Cookies are being deleted正在删除 Cookie
【发布时间】:2018-05-20 13:20:12
【问题描述】:

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

上下文:

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

问题:

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

注意事项:

  1. 只有在浏览器最小化时才会发生这种情况
  2. 至少在 chrome 和 firefox 中会发生这种情况。
  3. 这只发生在生产环境中。在我的本地机器和 Visual Studio 上,我无法重现该问题
  4. asp.net 会话 cookie 已维护

我知道你很难只提供这些信息,但是,如果你能给我一些线索,那将是非常有帮助的。我正试图揭露这个问题,以便我们可以匹配类似的问题以找到适合这种情况的最佳解决方案。

提前谢谢你

[编辑]

我有一些关于这个问题的新消息:

  1. 使用 Chrome 版本 63.0.3239.84(官方版本)(64 位);
  2. Firefox 量子 57.0(64 位);
  3. 与我最初的想法相反,即使浏览器未最小化并且在页面加载后恰好 3 分钟(如果我调用该函数),也会发生这种情况
  4. cookie 没有被删除,但 cookie 的内容是:
  5. 这是一个 asp.net 网络应用程序
  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));
        }
    });
    }
    

【问题讨论】:

  • 您可以启用网络选项卡,然后最小化浏览器吗?还要将 console.log 与 time print 一起放置,这样您就知道发生了什么,看看是否由于某种原因会话超时或没有进行呼叫?我假设您使用的是 setTimeout 或 setInterval?无论如何,在最小化后添加日志记录并检查控制台
  • 因为这和图纸有关,我猜想最小化的时候读屏会不会有问题?如果你在调用ajax之前删除了cookie,那么ajax调用失败可能会导致cookie被删除?
  • 你用什么代码来生成cookie?发生这种情况时,您是否遇到任何控制台错误?您使用什么版本的 Chrome 和 FF 进行测试?
  • @RicardoRocha 我看不到 cookie 的创建或更新位置。这表明您的 cookie 数据是由您的 ASP.NET 代码而不是 JS 创建、管理和更新的。 3 小时的时间段表明超时正在某处触发此更改。 cookie 似乎没有过期,但以某种方式更新,内容设置为""
  • 请发布创建和/或管理cookie“客户”的代码。现在,我看到的只是 JS 和 jQuery 代码,其中没有对 cookie 的引用。

标签: jquery asp.net ajax cookies


【解决方案1】:

我想在 ASP.NET 端查看您的代码,但如果没有,我只能猜测:也许检查一下您是否设置了 cookie 到期日期?下面是一个使用 1 天有效期创建的 cookie 示例:

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

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

【讨论】:

    【解决方案2】:
    1. 您可以增加 Cookie 的过期时间(在您创建 Cookie 的代码中)。

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

    例如localStorage.setItem 用于设置值,localStorage.getItem 用于从本地存储中获取值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-22
      • 2010-10-15
      • 1970-01-01
      • 2013-05-20
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多