日期:2008-02-28 浏览次数:20664 次
做用户登录,我不断用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: