cookie 的Domain删除失败的问题
最近接手一个老项目,项目中使用的是cookie来做的处理的,新增的时候cookie添加了域,
但是删除的时候没有添加域,导致删除cookie的时候一直失败!还有cookie的创建与删除,应该都必需经过页面的刷新,或是页面跳过后 才有效..
而ie删除cookie的时候成功了!如底下的js代码,
document.execCommand("ClearAuthenticationCache")
|
试了下,IE下完全正常,如果说这么简单就解决这个问题的话,也太低估我们的浏览器大军了,FireFox和Chrome等非微软系的浏览器根本无视上面的代码,所以只有另辟蹊径了。可以参考:http://wangye.org/blog/archives/874/
<script type="text/javascript">
function singout() {
deleteCookie("WEACToken");
deleteCookie("LtpaToken");
document.execCommand("ClearAuthenticationCache");
window.location.href = 'Login.aspx';
}
/* 删除Cookie */
function deleteCookie(name) {
var expdate = new Date();
expdate.setTime(expdate.getTime() - 1000);
setCookie(name, "", expdate);
}
/* 设置Cookie */
function setCookie(name, value) {
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
if (!(expires instanceof Date)) {
alert(" this expires date is null! ");
return;
}
document.cookie = name + "=" + escape(value) + ((expires == null) ? "" : (";expires=" + expires.toGMTString()));
}
</script>
在ie浏览器下cookie删除成功,但是根本就不是 deleteCookie方法的作用,而是 document.execCommand("ClearAuthenticationCache")起的作用,导致一直被误导了;
后面代码的修改:C#
对于domain的解释:在w3c中没有找到解释,在MSDN中的解释是默认当前域。
https://msdn.microsoft.com/zh-cn/library/system.web.httpcookie.domain.aspx
有多个子系统公用了一个域名,假如有两个相同的cookie 名称,那么在一个子系统中删除的cookie时是删除哪一个呢,所以没有添加域名,导致浏览器不指定删除哪一个cookie。(个人解释)
protected void Page_Load(object sender, EventArgs e)
{
//Session.Remove("LoginStatus");
HttpCookie eacCookie = Request.Cookies[Consts.COOKIE_NAME];
HttpCookie ltpaCookie = Request.Cookies["LtpaToken"];
RemoveCookie(eacCookie);
RemoveCookie(ltpaCookie);
//string script = "<script>window.close();</script>";
//ClientScript.RegisterStartupScript(this.GetType(), "logout", script);
//Response.Redirect("Default.aspx");
}
private void RemoveCookie(HttpCookie cookie)
{
if (cookie != null)
{
HttpContext.Current.Response.Cookies.Remove(cookie.Name);
cookie.Domain = "." + MCS.SSO.DataAccess.SettingAccess.GetSettingValue("SSODomain");
cookie.Value = String.Empty;
cookie.Expires = DateTime.Now.AddDays(-);
HttpContext.Current.Response.Cookies.Add(cookie);
}
}
像上面那样处理 cookie删除就成功了!
<script type="text/javascript">
function singout() {
//deleteCookie("WEACToken");
//deleteCookie("LtpaToken");
//document.execCommand("ClearAuthenticationCache");
window.location.href = 'Login.aspx';
}
/* 删除Cookie */
function deleteCookie(name) {
var expdate = new Date();
expdate.setTime(expdate.getTime() - 1000);
setCookie(name, "", expdate);
}
/* 设置Cookie */
function setCookie(name, value) {
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
if (!(expires instanceof Date)) {
alert(" this expires date is null! ");
return;
}
document.cookie = name + "=" + escape(value) + ((expires == null) ? "" : (";expires=" + expires.toGMTString()));
}
</script>
cookie的失效时间设置成功,浏览器清除cookie成功!
cookie 的Domain删除失败的问题的更多相关文章
- js与cookie的domain和path之间的关系
1.前言 使用javascript操作cookie我们都经常使用,对cookie不是很了解的话可以看下这篇帖子[javascript操作cookie](http://www.cnblogs.com/D ...
- 顶级域名和二级域名共享cookie及相互删除cookie
在CSDN看到一个cookie设置domain时,如何删除的问题, 自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和dom ...
- http cookie的domain使用
问题描述 最近遇到了一个因cookie domain设置不正确导致公司自研的分布式session组件无法生效的问题. 公司自研的这套分布式session组件依赖于设置在cookie中的sessionI ...
- pt-online-schema-change 修改主键导致数据删除失败的问题调查
pt-online-schema-change在线DDL工具可以做到DDL操作不锁表,不影响线上操作.对于线上超过100W的大表,一般情况下都用这个工具做DDL,最重要的考虑点还是“不影响线上操作” ...
- Cookie的Domain
每个Cookie都有常用的几个元素:name.value.expires.domain Cookie的Domain 设置cookies时,可以设置cookie的域名参数domain,标识cookie在 ...
- Cookie的Domain属性
Cookie 加了Domain后就写不进去了(不加domain就可以写进去了) 本地测试的时候需要把domain换成localhost cookie跨域的问题,意思就是说A.com下能访问B.com域 ...
- windows10 蓝牙(Bluetooth®)设备删除失败解决方案
某次更新后蓝牙鼠标突然断线无响应,于是尝试删除设备后重新配对,但是出现了删除失败: 这时候可以这样解决: 进入设备管理器(Win+X 设备管理器) 点击 查看 (在最上面一行),选择"显示隐 ...
- SQL SERVER代理作业删除失败问题
在SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败. DELETE 语句与 REFERENCE 约束"FK_subplan_job ...
- jquery.cookie.js插件删除不掉cookie的问题
在使用cookie插件时基本上不会有问题但就是用插件给的方法删除cookie有时候删除不掉. 他的删除方法是: $.cookie('the_cookie', '', { expires: -1 }); ...
随机推荐
- JS 无提示关闭当前窗口
function teseClose() { window.opener = null; window.open('','_self'); window.close(); }
- xp sp3安装 iis5.1
1.依次打开左下角的 "开始" 菜单----控制面板----选择 "添加/删除程序", 点击窗体左侧 "添加/删除Windows组件"(A) ...
- 解决MacOS Terminal打开慢的问题
用了Mac有一段时间了,突然发现Terminal打开奇慢,每次打开都显示logining...,打开大概要个五六秒的时间,以前打开都是瞬间打开的啊,这对于我们这种追求速度的程序员怎么受的了呢.开始一直 ...
- 深入剖析C/C++函数的参数传递机制
2014-07-29 20:16 深入剖析C/C++函数的参数传递机制 C语言的函数入口参数,可以使用值传递和指针传递方式,C++又多了引用(reference)传递方式.引用传递方式在使用上类 ...
- Android再学习-便签开发小结-20141119
这几天的便签开发,首先遇到的问题就是数据库操作问题.现在已经可以读写数据库了,并能将数据放在正确的位置显示. 专门建立了一个数据库操作的包,命名为"...database".新建一 ...
- 文成小盆友python-num11-(1) 线程 进程 协程
本节主要内容 线程补充 进程 协程 一.线程补充 1.两种使用方法 这里主要涉及两种使用方法,一种为直接使用,一种为定义自己的类然后继承使用如下: 直接使用如下: import threading d ...
- Python番外 事务 那些事
Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要么就不做.也就是说,事务必须是一 ...
- autorelease(转)
autorelease(转) (2013-02-05 18:27:43) 转载▼ 总觉得autorelease这里掌握的不到位,但涉及到内存管理,实在不可小视.今天参考了网上的不少文章和官方A ...
- google jam 比赛题(设计有问题)
题目: Problem Do you know how to read the phone numbers in English? Now let me tell you. For example, ...
- MTKdroidToolsV2.53 MTK安卓提取线刷资料的工具 使用教程
备份的时候需插入1G以上内存卡,并确保机器电量充足. 机器需要root才能备份. 最新版本 支持大部分机型 一键root