最近接手一个老项目,项目中使用的是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成功!
时间: 2024-11-09 05:12:12