欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【对ASP.NET Cookie的一些新的认识】,下面是详细的分享!
对ASP.NET Cookie的一些新的认识
做用户登录,我一直用form验证的方式。有时候,为了节省时间,用户希望用户名输入框能够记住用户名,省得下次重新输入。这个时候光用form验证是不行的,因为form验证的话,用户一退出系统就失效了,所以需要借助于Cookie。
本以为做这个会很轻松,谁知花了不少时间也没有成功。虽然检验用户名和密码都是正确的,但系统总是拒绝登录,然后返回到登录页面。登录页面的用户名输入框记是记住用户名了,但用户名是乱码的。
真是郁闷至极!一度以为系统发生了错乱,重启机器也还是无济于事。经反复检查和测试发现,如果在form验证之前写入cookies,就会拒绝登录。这可能是asp.net出于安全考虑,发现了一个与from标识相同的cookies值,但是它没有明确地这样提示。
解决这个问题的做法是,要先验证登录再把用户名写入cookies,这样就可以成功。
|
以下为引用的内容: System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登录... |
至于输入框的用户名显示为乱码是因为存储的是中文用户名,把中文字符写入cookies时,如果不做任何处理是会生产乱码的。解决方法是如上面红色代码所示,在写入的时候使用url编码,而且编码格式需要是中文格式的。在取得cookies值的时候做相应的解码即可:
|
以下为引用的内容: UserName.Text = HttpUtility.UrlDecode(Request.Cookies["RememberMe"].Value, System.Text.Encoding.GetEncoding("gb2312")); |
另一个问题是删除cookies,以前一直以为用Response.Cookies.Remove(“RememberMe”)可以删除,但就是没有效果。原来调用Cookies集合的 Remove 方法可从服务器端的集合中移除 Cookie,使 Cookie 不会被发送至客户端。但是,如果客户端已存在 Cookie,则该方法无法从客户端将其移除。 解决方法是,将 Cookie 的到期日期设置为过去的日期,让用户的浏览器来删除 Cookie:
|
以下为引用的内容: if (Response.Cookies["RememberMe"] != null) Response.Cookies["RememberMe"].Expires = DateTime.Now.AddDays(-1);//删除 |
最后一个问题是创建浏览器进程的cookies(即关闭浏览器就会自动清空),创建方法相当简单,不要设置Expires属性就是默认的浏览器进程cookies。
结尾附上关键部分的代码:
|
以下为引用的内容: System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登录,一定要先验证if (RememberMe.Checked)//再写入cookie { if (Request.Cookies["RememberMe"] == null) { Response.Cookies["RememberMe"].Value = HttpUtility.UrlEncode(UserName.Text, System.Text.Encoding.GetEncoding("gb2312")); Response.Cookies["RememberMe"].Expires = DateTime.Now.AddMonths(1); } } else { if (Response.Cookies["RememberMe"] != null) Response.Cookies["RememberMe"].Expires = DateTime.Now.AddDays(-1);//删除 } |
读取cookies值的时候:
|
以下为引用的内容: if (!IsPostBack){ if (Request.Cookies["RememberMe"] != null) { UserName.Text = HttpUtility.UrlDecode(Request.Cookies["RememberMe"].Value, System.Text.Encoding.GetEncoding("gb2312")); RememberMe.Checked = true; } } |
总结一下:
1.写一个与form验证相同用户名的值到cookies中,应该先验证后写cookies,否则会产生冲突,导致验证不能通过。
2.删除cookie的正确方法是设置已有cookies的日期为早于当前时间的日期,使用Cookies.Remove是没有效果的。
3.创建浏览器进程的cookies,不要设置Expires属性就行了,这样关闭浏览器就会自动被清空
4.cookies值是中文的时候最好用gb2312编码一下,这样可以避免产生乱码。
原文地址:http://www.cnblogs.com/qingyun163/archive/2009/12/11/1621734.html
以上所分享的是关于对ASP.NET Cookie的一些新的认识,下面是编辑为你推荐的有价值的用户互动:
相关问题:ASP.NET cookie使用问题
答:解答你的问题首先应该明白cookie在.net下的操作方式,简述一下: 原始的cookie设置方法是通过response来进行设置。 Response.Cookies["name"].value="value"; 但是如果我们要设置多个值,那么就要多次重复上述语句。 Response.Cookies["name"].v... >>详细
相关问题:asp.net中cookie记住登录状态与安全问题
答:一般是使用Session+Cookie判断,每个页面都继承自一个父类页面,父类页面做Session和Cookie的判断就可以了,或者在过滤器那里判断(即Global.asax中),在每次请求前(BeginProcessRequest)都做判断就好~ >>详细
相关问题:asp.net 删除cookie问题,求助
答:你只是用Request.Cookies中所有Cookie的名字重新实例化一个Cookie,然后设置过期,这是在同一个方法中执行的,并没有对Request.Cookies本身做任何更改,肯定有值啊 要想让他没值的话 for (int i = 0; i < limit; i++) { Request.Cookies[i].Expi... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
