• 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(-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成功!

  • 相关阅读:
    VS中常用的快捷键
    C#邮件发送(最坑爹的邮箱-QQ邮箱)
    MVC文件上传与下载
    CodeFirst体验之且行且珍惜
    遮罩层中的相对定位与绝对定位(Ajax)
    五险一金 社保基数 住房公积金基数以及个税(By FlyElephant)
    链式编程
    "WannaCry"勒索病毒用户处置指南
    C# 序列化和反序列化
    s
  • 原文地址:https://www.cnblogs.com/wucaifang/p/cookie.html
Copyright © 2020-2023  润新知