刪除 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混亂了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM