關於Asp.net的cookie的細節點1

開門見山,系統使用cookie進行登陸,今天在完善框架,增長退出功能,按理說,清除cookie而後跳回到login頁面就能夠了,可出現一個奇怪的現象,竟然不是百分之百的回到登陸,有時候會卡在主頁面,不響應。 cookie

刪除cookie相關的代碼以下:

       app

public void clearAll(HttpContext context)
        {
           
            context.Response.Cookies.Clear(); 

            for (int i= 0;i < context.Request.Cookies.Count;i++)
            {
               HttpCookie cookie= context.Request.Cookies[i];
                HttpCookie tmp_cookie = new HttpCookie(cookie.Name);
                tmp_cookie.Expires = DateTime.Now.AddDays(-1);
                context.Response.Cookies.Add(tmp_cookie);
            }
        }

有時候會出現報錯:「對象的當前狀態使該操做無效」框架

而百度查詢資料說是由於  ASP.NET Request 表單域的默認長度是1000,若是是超過一千 就會出錯,調試

要增長配置code

 

在Web.config的appSettings加入以下配置
<appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="5000" />對象

</appSettings>io

可在我本身的系統中,明明只有少數幾個cookie,怎麼可能會須要設置這個值呢? 因而繼續跟蹤調試程序代碼,發現每次for循環,context.Request.Cookies.Count 這個值都在增長,是不斷在變化的。for循環

也就是說,這個循環在無限執行。因此形成了collection的長度超過了1000。class

因而將上面代碼修改以下登錄

public void clearAll(HttpContext context)
        {
            //  HttpCookieCollection collection=  context.Request.Cookies;
            context.Response.Cookies.Clear();

            int count = context.Request.Cookies.Count; 
            for (int i= 0;i < count;i++)
            {
               HttpCookie cookie= context.Request.Cookies[i];
                HttpCookie tmp_cookie = new HttpCookie(cookie.Name);
                tmp_cookie.Expires = DateTime.Now.AddDays(-1);
                context.Response.Cookies.Add(tmp_cookie);   
            }
        }

這樣count是不會隨着 context.Request.Cookies.Count 的變化去變化了。 也就達到了刪除cookie的效果,中間不會出現異常。

 

分享經驗,本身mark一下的同時,也讓你們都能受益,歡迎各位大神批評指正,聯繫QQ:732403040

無論是加Q,仍是郵件,歡迎打擾. 

相關文章
相關標籤/搜索