正在删除 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的主要内容,如果未能解决你的问题,请参考以下文章