ASP.NET教程:form验证用户登录的Cookie

做用户登录,我一直用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);//删除

最后一个问题是创建浏览器进程的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编码一下,这样可以避免产生乱码。

时间: 2024-10-28 20:12:54

ASP.NET教程:form验证用户登录的Cookie的相关文章

asp.net中mvc验证用户登录的例子

因此一般我都是把AcountController的相关的东西都删了,一步一步自己来重建自己的登陆模块. MVC提供了四种Filter(钩子),用于在Action执行之前或者之后,我们能够做一些事情,比如说判断有没有登录,比如说判断有没有权限. IAuthorizationFilter:在所有Filter和Action执行之前执行 IActionFilter:分别在Action执行之前和之后执行. IResultFilter:分别在Action Result执行之后和之前 IExceptionFi

Asp.Mvc 2.0实现用户登录与注销功能实例讲解(2)_实用技巧

这一节讲解下ASP.MVC 2.0的用户登录与注销功能,先讲登录,后说注销.我们这个系列讲的用户登录方式都是FORM表单验证方式.在讲之前先给大家说下<%:%>的功能,<%:%>与<%=%>功能一样,用来动态输出内容.一.登录1. 建立MODEL 登录的时候,我们一般只要验证用户名和密码,还有是否保存登录COOKIE,所以我们建立一个MODEL登录类,只需包括3个字段就可以. /// <summary> /// 用户登录MODEL /// </summ

Struts 2.1.6精简实例系列教程(2):用户登录模块的实现

用户登录几乎是每一个Web系统的必需模块,本期教程就通过用户登录模块来讲解Struts2.1.6的Action和Result的Annotation配置. 上期的Struts 2.1.6 精简实例系列教程(1):环境的搭建与HelloSimple中,我们建的package名为"cn.simple.action",这些包名有一个规则的,只要包含 "action,actions,struts,struts2"都会默认被扫描到为Action类,也就是说,我们只要配置了如 &

大家帮忙看看这段验证用户登录信息的代码有什么错误

问题描述 为什么他一直返回false呢?publicbooleanland(){booleanexist=false;UserInfoui=newUserInfo();Stringsql="selectusername,passwordfromuserwhereusername='"+username+"'";JDBCBeanjdbc=newJDBCBean();ResultSetrs=jdbc.executeQuery(sql);try{if(rs.getStri

PHP+Ajax验证码验证用户登录_php实例

用AJAX 验证用户登录的一个好处是不刷新跳转页面,外加用到验证码就更安全了,摸索的写了下.一共用到三个文件: yz.php:  生成验证码的PHP 文件,将验证码将在SESSION 里,供登录时对比调用index.php: 用户登录的HTML 文件loginCheck.php: 验证用户登录的文件 下面一一解析:yz.php 文件 <?php session_start(); //生成验证码图 Header("Content-type: image/PNG"); //长与宽 $

二种php用户登录代码(cookie,数据库)

下面我们要讲到二种用户登录方法一种是利用window验证加数据库教程密码验证实现登录,后者是利用cookie记录用户信息进行登录,有需要的朋友可以试下. <?php教程    function authenticate_user() {       header('WWW-Authenticate: Basic realm="Secret Stash"');       header("HTTP/1.0 401 Unauthorized");       ex

php用户登录之cookie信息安全分析_php技巧

本文实例讲述了php用户登录之cookie信息安全.分享给大家供大家参考,具体如下: 大家都知道用户登陆后,用户信息一般会选择保存在cookie里面,因为cookie是保存客户端,并且cookie可以在客户端用浏览器自由更改,这样将会造成用户cookie存在伪造的危险,从而可能使伪造cookie者登录任意用户的账户. 下面就说说平常一些防止用户登录cookie信息安全的方法: 一.cookie信息加密法 cookie信息加密法即用一种加密方法,加密用户信息,然后在存入cookie,这样伪造者即使

[Asp.Net MVC4]验证用户登录实现实例_实用技巧

最近我们要做一个仿sina的微博,碰巧的是我最近在学习mvc,就想用mvc技术实现这个项目. 既然是微博,那不用想也应该知道肯定要有用户登陆,但是和常规的asp.NET登陆又不一样,以下是我一下午+一晚上的研究成果~~~ 首先,建好数据库以及表,这就不用说了吧. 下面说一下主要的结构 控制器: HomeController 这是主页的控制器 LoginController 这是登陆的控制器 类: CDBTemplate.cs 这是数据库数据对应的类,里边描述的是数据库的结构 //////////

ASP.NET学习手记:验证用户表单输入

运行环境:Win2000 Advance Server+IIS5.0+NGWS SDK(80M的).其中验证email地址的函数用的是廖兄精华区中的代码.<%@ Page Language="C#" %> <html><script language="javascript">function ClientValidateEmail(source, value){  var strr;  re=/(\w+@\w+\.\w+)(\.