开门见山,系统使用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,仍是邮件,欢迎打扰.