zoukankan      html  css  js  c++  java
  • 删除 HttpCookie

      用HttpCookie存放Language来实现多国语言,但在IE中能实现,在Firefox中却无法实现。

      诡异的现象一:怎么删也删不掉?

      一开始用的方法是Remove方法,如下:

    protected void ddlLng_SelectedIndexChanged(object sender, EventArgs e)
            {
                HttpCookie httpCookie = new HttpCookie(SessionKeys.CookieName);
                Response.Cookies.Remove(SessionKeys.CookieName);
                Response.Cookies.Add(httpCookie);
                httpCookie.Values.Add(SessionKeys.Language, ddlLng.SelectedValue);
                Response.Cookies[SessionKeys.CookieName].Expires = DateTime.Now.AddYears(1);
    
                Response.Redirect(Request.Url.PathAndQuery);
            }

      但是这个Remove方法是不可靠的,这个操作在HttpCookieCollection这个集合里面删除了cookie,当服务器将数据传输到客户端的时候,不会包含这个已经在服务端删除了的Cookie的任何信息,浏览器也就不会对它做任何改变(remove方法只是不让服务器向客户机发送那个被删除的cookie,与此cookie留不留在客户机里无关)。所以cookie删除不掉的情况就出现。

      而且在MSDN的删除HttpCookie的示例上也没有用该方法!于是尝试着用MSDN的示例!

      于是有了诡异的现象二:明明删掉了,为什么还是显示“zh-CN”呢???

      用MSDN的示例,代码如下

            protected void ddlLng_SelectedIndexChanged(object sender, EventArgs e)
            {
                HttpCookie cookies = Request.Cookies[SessionKeys.CookieName];
                if (cookies != null)
                {
                    cookies.Expires = DateTime.Today.AddDays(-1);
                    Response.Cookies.Add(cookies);
                    Request.Cookies.Remove(SessionKeys.CookieName);
                }
    
                HttpCookie c = new HttpCookie(SessionKeys.CookieName);
                c.Values.Add(SessionKeys.Language, ddlLng.SelectedValue);
                c.Expires = DateTime.Now.AddYears(1);
                Response.Cookies.Add(c);
    
                Response.Redirect(Request.Url.PathAndQuery);
            }

      明明删掉后,并将Cookie的值赋为“en-US”,为什么还能读到“zh-CN”呢?难道MSDN也靠不住了吗???网上搜了很多,所有人都在用这个方法,那为什么我的不行呢?

      几经思索,突然想到这跟浏览器有关吗?虽然安装Firefox会将IE的Cookie一并带过来,但IE的Cookie和Firefox的Cookie会不会有问题?会不会我删的是Firefox的Cookie,接着读的是IE的Cookie? 想到这,立马把两个浏览器的Cookie删除,并将Firefox的“Accept third-part cookies”(Tools->Options->Privacy->Firefox will->select 'Use custom settings for history'->Accept third-part cookies)去掉。再试,成功!看来果然是两处的Cookie混乱了!

  • 相关阅读:
    虚拟机通过nat(网络地址转换)可以联网但无法解析域名(解决)
    信息安全系统设计与实现:第三章学习笔记
    电子公文系统-规格需求说明书
    团队作业(二):需求分析
    信息安全系统设计与实现:第十一章学习笔记
    Scala --Actor通信模型概述
    Hadoop项目调优
    大数据生态组件常用服务端口
    HBase性能优化总结
    Hbase架构,组件分析 ,Hbase集群搭建
  • 原文地址:https://www.cnblogs.com/takako_mu/p/2751126.html
Copyright © 2011-2022 走看看