• 删除 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混乱了!

  • 相关阅读:
    vue-cli3初尝试之路径别名配置
    nodejs之koa-router与koa-body搭配使用
    nodejs之crypto加密算法
    nodejs之glob与globby
    vuecli3初尝试(转载)
    python之线程同步
    python之多线程通信
    python之通过thread来实现多进程
    U盘启动盘安装Mac OS
    Windows环境下制作MACOS X U盘安装盘
  • 原文地址:https://www.cnblogs.com/takako_mu/p/2751126.html
Copyright © 2020-2023  润新知