码迷,mamicode.com
首页 > 其他好文 > 详细

cookie 的Domain删除失败的问题

时间:2015-06-18 13:10:08      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

  最近接手一个老项目,项目中使用的是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(-1);
                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删除失败的问题

标签:

原文地址:http://www.cnblogs.com/wucaifang/p/cookie.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!