关于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,仍是邮件,欢迎打扰. 

相关文章
相关标签/搜索