对ASP.NET Cookie的一些新的认识

转载 2008年09月28日 13:18:00

做用户登录,我一直用form验证的方式。有时候,为了节省时间,用户希望用户名输入框能够记住用户名,省得下次重新输入。这个时候光用form验证是不行的,因为form验证的话,用户一退出系统就失效了,所以需要借助于Cookie。  
 
本以为做这个会很轻松,谁知花了不少时间也没有成功。虽然检验用户名和密码都是正确的,但系统总是拒绝登录,然后返回到登录页面。登录页面的用户名输入框记是记住用户名了,但用户名是乱码的。  
 
真是郁闷至极!一度以为系统发生了错乱,重启机器也还是无济于事。经反复检查和测试发现,如果在form验证之前写入cookies,就会拒绝登录。这可能是asp.net出于安全考虑,发现了一个与from标识相同的cookies值,但是它没有明确地这样提示。  
 
解决这个问题的做法是,要先验证登录再把用户名写入cookies,这样就可以成功。  
 
System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text,false);//登录...  
 
//将用户名写入cookies  
 
Response.Cookies["RememberMe"].Value = HttpUtility.UrlEncode(UserName.Text, System.Text.Encoding.GetEncoding("gb2312"));  
 
Response.Cookies["RememberMe"].Expires = DateTime.Now.AddMonths(1);  
 
至于输入框的用户名显示为乱码是因为存储的是中文用户名,把中文字符写入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);//删除  
 
结尾附上关键部分的代码:  
 
        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;  
 
            }  
 
        } 

 

更多:

http://blog.csdn.net/zhangyj_315

对ASP.NET Cookie的一些新的认识

做用户登录,我一直用form验证的方式。有时候,为了节省时间,用户希望用户名输入框能够记住用户名,省得下次重新输入。这个时候光用form验证是不行的,因为form验证的话,用户一退出系统就失效了,所以...
  • zhangyj_315
  • zhangyj_315
  • 2008年06月30日 14:31
  • 785

我对计算机的认识

这篇文章并不是我在翻阅大量书籍和资料得出来的学习领悟,而是我根据自己的认知猜测出来的东西。 也是我以后慢慢看书寻找答案的开始。 大学学了计算机基础还有微机原理等课程,每当讲到一些系统啊一些...
  • iweiwei520
  • iweiwei520
  • 2015年10月17日 15:44
  • 206

对ASP.NET Cookie的一些新的认识

做用户登录,我一直用form验证的方式。有时候,为了节省时间,用户希望用户名输入框能够记住用户名,省得下次重新输入。这个时候光用form验证是不行的,因为form验证的话,用户一退出系统就失效了,所以...
  • ulark
  • ulark
  • 2009年12月11日 11:27
  • 242

ASP.net的简单认识

前言      小编最近在进入BS的学习过程中,接触到了ASP.net的框架,那么它是什么,有什么作用呢? ASP.net是什么 一、web框架    小编在微软的官网...
  • m18633778874
  • m18633778874
  • 2018年01月08日 15:18
  • 68

当前最新it技术了解

机器学习 计算机程序如何随着经验的积累提高性能 深度学习 深度学习的概念源于人工神经网络的研究,含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属...
  • qq_26562641
  • qq_26562641
  • 2016年10月19日 09:37
  • 342

对编程语言的认识

面对众多的编程语言,何处是归路?
  • kiaapeng
  • kiaapeng
  • 2015年06月07日 14:28
  • 882

asp.net(入门理解)

一:asp.net入门理解的总结图如下 二:详细介绍 1,asp.net的概念     首先,asp.net是一门技术,不同于ado.net类库,也不同于vb.net...
  • lishuangzhe7047
  • lishuangzhe7047
  • 2013年06月03日 19:31
  • 4018

我对程序设计的认识

环境与法律编程语言就像法律,同样类型的法律在不同国家规则不同,适用的范围也不同,相同的部分可能实际操作上有的比较简化,有的比较繁琐。就好像C++与java 虽然都支持类的继承,但java只允许一个类仅...
  • Dreamcode
  • Dreamcode
  • 2007年05月23日 17:14
  • 2085

Android初试--了解和认识Android

1.了解Android        Android一词本义指“机器人”,是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用...
  • guizhaiteng
  • guizhaiteng
  • 2013年09月17日 17:57
  • 1423

面试题-谈谈对java的认识

Java的基本认识 1、基本介绍 Java是一种跨平台的面向对象的开发语言。具有 简单性,面向对象,分布式,解释型,可靠,安全,平台无关,可移植,高性能,多线程,动态性等特点。 2、具体...
  • u011545779
  • u011545779
  • 2014年04月13日 18:39
  • 2253
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对ASP.NET Cookie的一些新的认识
举报原因:
原因补充:

(最多只允许输入30个字)