【发布时间】: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 的引用。
标签: jquery asp.net ajax cookies