我有一个 asp.net mvc 应用程序,并且发生了奇怪的事情,但我不知道为什么。
上下文:
我有一个允许用户绘制和编辑图像的页面。该页面有一个功能,每 5 分钟,她使用 jquery 对服务器进行一次 ajax 调用,将项目的当前状态保存在数据库中,并再次调用以保存项目的图像存放在适当的地方。
问题:
在浏览器最小化的情况下,启动此功能后,在对服务器进行 ajax 调用后,cookie 客户将删除。但是当镶边最大化时,效果很好。
注释:
- 只有在浏览器最小化时才会发生这种情况
- 至少在 Chrome 和 Firefox 中,这种情况正在发生。
- 这仅发生在生产环境中。在我的本地计算机和 Visual Studio 上我无法重现该问题
- 维护 asp.net session cookie
我知道仅凭这些信息对您来说很难提供帮助,但是,如果您能给我线索,那将非常有帮助。我试图揭露这个问题,以便我们可以匹配类似的问题,找到针对此案例的最佳解决方案。
提前谢谢
[编辑]:
我对这个问题有一些新的认识:
- 使用 Chrome 版本 63.0.3239.84(官方版本)(64 位);
- Firefox 量子 57.0(64 位);
- 与我最初的想法相反,即使浏览器未最小化并且页面加载后恰好 3 分钟(如果我调用该函数),也会发生这种情况
- Cookie 并未被删除,但 Cookie 的内容是:
- 这是一个 ASP.NET Web 应用程序
- 控制台没有给出任何错误
- 查询的版本是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)); } }); }
请您参考如下方法:
我想在 ASP.NET 端看到你的代码,但如果没有这个,我只能猜测:也许检查一下你是否设置了 cookie 过期日期?以下是创建的 cookie 有效期为 1 天的示例:
Dim myCookie As HttpCookie = New HttpCookie("Customer")
myCookie.Expires = Now.AddDays(1)
Response.Cookies.Add(myCookie)
如果省略 myCookie.Expires 属性,则 cookie“将在用户 session 过期时过期”,引用。 https://msdn.microsoft.com/en-us/library/78c837bd.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1
