正在删除 Cookie

Posted

技术标签:

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

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

上下文:

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

问题:

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

注意事项:

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

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

提前谢谢你

[编辑]

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

    使用 Chrome 版本 63.0.3239.84(官方版本)(64 位); Firefox 量子 57.0(64 位); 与我最初的想法相反,即使浏览器未最小化并且在页面加载后恰好 3 分钟(如果我调用该函数),也会发生这种情况 cookie 没有被删除,但 cookie 的内容是: 这是一个 asp.net 网络应用程序 控制台没有给出任何错误 查询版本为2.1.3

    遵循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 的引用。 【参考方案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】:

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

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

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

【讨论】:

以上是关于正在删除 Cookie的主要内容,如果未能解决你的问题,请参考以下文章

Cookie和Session

在servlet中获取cookie

在servlet中获取cookie

MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求

cookie

cookie