最近接手一个老项目,项目中使用的是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. Python时间戳和日期

    import time localtime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) prin ...

  2. (转)强大的JQuery表单验证插件 FormValidator使用介绍

    jQuery formValidator表单验证插件是客户端表单验证插件.在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人资料,录入一些常规数据等等.在这之前,页面开发者(J ...

  3. Objective-C中instancetype和id的区别

    要区分instancetype和id,首先要弄清楚什么是关联返回类型(Related Result Type). 关联返回类型即一个方法的返回类型就是调用这个方法的调用者的类型.具有下列条件的方法具有 ...

  4. Hibernate插入数据效率测试

    硬件配置: 4G内存.CPUi3-2.3 数据库SQL2008 package com.pan.test; import org.hibernate.Session; import org.hiber ...

  5. Java系列--第四篇 基于Maven的SSME之发送邮件

    在系列第一篇中,使用的是mybatis得到了一个小小的项目,而该项目的用户对象是有邮件地址的,如果按照邮件地址给对方去一封邮件会不会更能体现针对性呢,所以,我在这篇准备加入发送邮件的功能,利用的就是s ...

  6. 作业:汽车查询--弹窗显示详情,批量删除 php做法(0521)

    作业:显示以下界面: 作业要求: 1.查看详细信息,以弹窗的形式显示,使用ajax2.批量删除 一.主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  7. C程序设计语言练习题1-7

    练习1-7 编写一个打印EOF的值的程序. #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它不接受参数值. { // ...

  8. IIC 概述之24c系列存储器内存分析

    IIC 型号     容量      器件/业面寻址字节                   可寻址位       模块 24C01   128B      (1010)(A2)(A1)(A0)(0或 ...

  9. layout_gravity与gravity的区别

    1:android:gravity 这个是针对控件里的元素来说的,用来控制元素在该控件里的显示位置. 2:android:layout_gravity 这个是针对控件本身而言,用来控制该控件在包含该控 ...

  10. BeanUtils框架浅析

    一.使用步骤: 1.添加jar包: commons-beanutils-1.8.0.jar commons-logging.jar 2.使用setProperty()方法对javabean设置属性值 ...