好的,这是411 - 我的Global.asax.cs文件中有以下事件处理程序:
private void Global_PostRequestHandlerExecute(object sender, EventArgs e)
{
if (/* logic that determines that this is an ajax call */)
{
// we want to set a cookie
Response.Cookies.Add(new HttpCookie("MyCookie", "true"));
}
}
该处理程序将在Ajax请求期间运行(由于我正在使用的Ajax框架),以及其他时间 - if语句的条件过滤掉非Ajax事件,并且工作正常(它不是这里有关系,所以为了简洁起见我没有把它包括在内。
我们可以说这很好用 - 设置了cookie,我能够在客户端上阅读它,而且一切都很顺利。
现在是让我疯狂的部分。
这是我用来删除cookie的JavaScript函数:
function deleteCookie(name) {
var cookieDate = new Date();
cookieDate.setTime(cookieDate.getTime() - 1);
document.cookie = (name + "=; expires=" + cookieDate.toGMTString());
}
因此,当然,在设置cookie之后的某个时刻,我会这样删除它:
deleteCookie("MyCookie");
只是,这不起作用; cookie仍然存在。那么,有谁知道为什么?
答案 0 :(得分:9)
您必须在创建Cookie的同一路径中删除Cookie。 所以用path = /创建你的cookie并用路径= /把它删除..
答案 1 :(得分:4)
答案 2 :(得分:2)
您是否尝试使用“; expires = Thu,01-Jan-1970 00:00:01 GMT”?
答案 3 :(得分:2)
很奇怪..你粘贴的代码几乎是逐字逐句的:http://www.quirksmode.org/js/cookies.html工作正常..
我知道您正在使用Ajax,但您是否已经快速尝试将其敲入服务器端代码以查看是否可行?这可能有助于确定JS是否存在问题或其他问题(例如,在cookie上锁定神秘文件)?
只是有一个快速的谷歌,看起来也可能存在浏览器设置问题。我不认为你的问题是这里的代码,它更可能是其他东西。我建议尝试以上作为PoC,我们可以从那里移动。 :)
答案 4 :(得分:2)
我在my blog大约一周前发布了一个js cookie util。这对我来说在所有“A级”浏览器上都有用。
var CookieUtil = {
createCookie:function(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
},
readCookie:function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
},
eraseCookie:function(name) {
createCookie(name,"",-1);
}
};
答案 5 :(得分:1)
此外,如果在创建过程中指定了cookie域,我发现您还必须在尝试删除(过期)时指定cookie域。
答案 6 :(得分:0)
我们是否确定没有将Cookie设置为HttpOnly的代码(我们上面没有遗漏任何内容)? HttpOnly属性将阻止(现代)浏览器修改cookie。我有兴趣看看你是否可以像Rob建议的那样杀死服务器端。
答案 7 :(得分:0)
我假设你在浏览器端调用这个javascript。您使用的是哪种浏览器,如何查看Cookie以确认它仍然存在?