最近接手一个老项目,项目中使用的是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删除失败的问题的更多相关文章

  1. js与cookie的domain和path之间的关系

    1.前言 使用javascript操作cookie我们都经常使用,对cookie不是很了解的话可以看下这篇帖子[javascript操作cookie](http://www.cnblogs.com/D ...

  2. 顶级域名和二级域名共享cookie及相互删除cookie

    在CSDN看到一个cookie设置domain时,如何删除的问题, 自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和dom ...

  3. http cookie的domain使用

    问题描述 最近遇到了一个因cookie domain设置不正确导致公司自研的分布式session组件无法生效的问题. 公司自研的这套分布式session组件依赖于设置在cookie中的sessionI ...

  4. pt-online-schema-change 修改主键导致数据删除失败的问题调查

    pt-online-schema-change在线DDL工具可以做到DDL操作不锁表,不影响线上操作.对于线上超过100W的大表,一般情况下都用这个工具做DDL,最重要的考虑点还是“不影响线上操作” ...

  5. Cookie的Domain

    每个Cookie都有常用的几个元素:name.value.expires.domain Cookie的Domain 设置cookies时,可以设置cookie的域名参数domain,标识cookie在 ...

  6. Cookie的Domain属性

    Cookie 加了Domain后就写不进去了(不加domain就可以写进去了) 本地测试的时候需要把domain换成localhost cookie跨域的问题,意思就是说A.com下能访问B.com域 ...

  7. windows10 蓝牙(Bluetooth®)设备删除失败解决方案

    某次更新后蓝牙鼠标突然断线无响应,于是尝试删除设备后重新配对,但是出现了删除失败: 这时候可以这样解决: 进入设备管理器(Win+X 设备管理器) 点击 查看 (在最上面一行),选择"显示隐 ...

  8. SQL SERVER代理作业删除失败问题

    在SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败.   DELETE 语句与 REFERENCE 约束"FK_subplan_job ...

  9. jquery.cookie.js插件删除不掉cookie的问题

    在使用cookie插件时基本上不会有问题但就是用插件给的方法删除cookie有时候删除不掉. 他的删除方法是: $.cookie('the_cookie', '', { expires: -1 }); ...

随机推荐

  1. asp.net动态设置button的Text,Enabled属性,向后台传递参数

    前台代码:根据后台传递过来的参数动态设置 <asp:Button ID="Button1" runat="server" CommandArgument= ...

  2. SQL流程控制语句学习(三):while break continue

    1.while语法 while   布尔表达式 {sql语句或语句块} break  --跳出本层循环 {sql语句或语句块} continue  --跳出本次循环 {sql语句或语句块} 2.whi ...

  3. Action<T> 和 Func<T> 委托

    概述: 除了为每个参数和返回类型定义一个新委托类型之外,可以使用Action<T> 和 Func<T> 委托. Action<T> Action<T>委 ...

  4. c - 每位数字尾部加空格

    /* input:一个4位整数. output:每位整数后紧跟一个空格的字符串. */ char * insert(char *s) { int len = strlen(s); * len + ); ...

  5. html5标签placeholder使用

    <!DOCTYPE HTML> <html> <body> <form action="/example/html5/demo_form.asp&q ...

  6. python学习第十四天 -面向对象编程基础

    python也是支持面向对象编程的.这一章节主要讲一些python面向对象编程的一些基础. 什么是面向对象的编程? 1.面向对象编程是一种程序设计范式 2.把程序看做不同对象的相互调用 3.对现实世界 ...

  7. Java学习笔记--StringTokenizer的使用

    拓展:Pattern.split替代String.split http://www.cnblogs.com/gnivor/p/4386978.html StringTokenizer是一个用来分隔St ...

  8. MongoDB学习笔记--基本命令

    转自:http://www.cnblogs.com/xusir/archive/2012/12/24/2830957.html 数据库文件默认位置 /var/lib/mongodb 成功启动Mongo ...

  9. cf C. Fixing Typos

    http://codeforces.com/contest/363/problem/C s2用于存处理之后的字符串,再遍历s1的时候,s2会有两种情况1.s2最后两个字符是相同的如xx,如果这时再遇到 ...

  10. hdu 畅通工程再续

    http://acm.hdu.edu.cn/showproblem.php?pid=1875 #include <cstdio> #include <cstring> #inc ...