開門見山,系統使用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,仍是郵件,歡迎打擾.