首页 > 代码库 > ASP.NET 登录中Cookies和验证和前端Jquery

ASP.NET 登录中Cookies和验证和前端Jquery

1、登陆中的验证问题

      登录中用户名和密码的判断,一是怎么判断,需要调用业务逻辑层的判断方法,这里是单独拿出一个层Controls来进行授权和登录的验证。那怎么进行验证结果的返回,正确进入下个页面错误返回登录页面,首先想到的放法写一个bool的方法,正确进入下一个页面,错误返回登录页面。这里用的一个比较专业的方法是在Controls设置一个数据返回接口类DataResult.cs里面定义好code,Message,Data分别用于进行登录验证,错误信息返回,数据返回(这里暂时用不到)至于为什么这样做从UserAuthentication.cs中来解读,其实是方便用户授权验证的。

  /// <summary>
    /// 标准数据返回接口类
    /// </summary>
    public class DataResult
    {
        public string Code { get; set; }
        public string Message { get; set; }
        public object Data { get; set; }
    }
DataResult类

这样的话直接在验证中先实例化一下DataResult然后设置初始的值result.Code = "-1";用result = UserAuthentication.Current().LoginVerification(userName, pwd);来获取result的值,若为0直接判断返回

Response.Redirect("default.aspx", true);,若为不为0那直接跳到登录页面。具体UserAuthentication怎么返回0的可以从UserAuthentication.cs中来解读
总的流程是这样的:

public void Verification(string userName, string pwd)
    {
        DataResult result = new DataResult();
        result.Code = "-1";
        try
        {
            if (chkRememberMe.Checked)
            {
                //Response.Cookies["myUserName"].Value = http://www.mamicode.com/userName;
                CookieHelper.SetCookie("myUserName", userName, DateTime.Now.AddYears(1));
            }
            else
            {
                //Response.Cookies.Remove("myUserName");
                CookieHelper.RemoveCookie("myUserName");
            }

            result = UserAuthentication.Current().LoginVerification(userName, pwd);
            if (result.Code == "0")
            {
                Response.Redirect("default.aspx", true);
            }            
        }
        catch (Exception ex)
        {
            result.Message = ex.Message;
        }
        if (result.Code != "0")
        {
            labError.Text = result.Message;
        }
    }
登录验证类

2、登陆验证中的Cookies设置 

    (CookieHelper http://www.cnblogs.com/d685600/p/3666143.html)

      登录验证中不仅要验证用户名和密码还要对Cookies进行验证,在Cookies中,若记住用户名密码的复选框选中,则要写入Cookies,注意设置Cookies的几个字段,一个是在Cookies中的名称,还有一个是你当前要设置的值的名称,还有就是你设置Cookies的时间CookieHelper.SetCookie("myUserName", userName, DateTime.Now.AddYears(1));而对于删除Cookies只要指定删除的在Cookies中的名称就好了,

CookieHelper.RemoveCookie("myUserName");

            if (chkRememberMe.Checked)
            {
                //Response.Cookies["myUserName"].Value = http://www.mamicode.com/userName;
                CookieHelper.SetCookie("myUserName", userName, DateTime.Now.AddYears(1));
            }
            else
            {
                //Response.Cookies.Remove("myUserName");
                CookieHelper.RemoveCookie("myUserName");
            }
Cookies设置

3、登陆中的退出设置和记住用户名按钮

     首先要在Page_Load里面做判断,如果是退出系统要清空cookies,这就表明要在Cookies里面设置一个值(loginOut)来记录是否要退出系统,而若要是首次登录,直接读取Cookies的值(CookieHelper.GetCookieValue("myUserName")http://www.cnblogs.com/d685600/p/3666143.html)若能读出来,这是的用户名的框里有内容,复选框要勾上。

        if (!IsPostBack)
        {
            if(!string.IsNullOrEmpty(Request.QueryString["loginout"]))//当不等于空的时候
            {
                //要是退出系统访问,清空当前cookie
                UserAuthentication.Current().LoginOut();//清空会话
            }
            txtUserName.Text = CookieHelper.GetCookieValue("myUserName");
            if (!String.IsNullOrEmpty(txtUserName.Text))
            {
                chkRememberMe.Checked = true;
            }
        }
退出Cookies和复选框判断

注意其中的!string.IsNullOrEmpty(Request.QueryString["loginout"])获取loginout的值,注意这个不是从cookie中取,而是从请求连接到这个页面的那个页面取值,也就是Defualt.aspx中取,所以主页面中的退出按钮中的onclick这样写onclick="location=‘Login.aspx?loginout=1‘"。还要注意会用!string.IsNullOrEmpty()这个方法。

4、登录中前端用户名密码Jquery验证

      就是在表单提交的时候要有一个前端的验证,只在页面上用js进行。怎么写呢。$("form").bind("submit", function (){}) ,意思就是选中form在提交的时候触发这个函数,

$("button").bind("click",function(){
$("p").slideToggle();
});
示例js

上面这个示例的意思也是当鼠标点击这个按钮的时候触发这个函数。接下来就是提交的时候用户名和密码的正确性,这里只对不为空做判断。一般也要放到页面代码下端,等页面元素加载完后在进行判断。

     $(function ()
        {
            
            $("form").bind("submit", function ()
            {
                if (!$("#txtUserName").val())
                {
                    empty_error($("#txtUserName").parent());
                    return false;
                }
                if (!$("#txtPassword").val())
                {
                    empty_error($("#txtPassword").parent());
                    return false;
                }
                return true;
            })
        })
Jquery验证用户名密码

其中都用到了empty_error($().parent());这里注意parent,对选择的元素的父元素进行效果的施加,错误时显示红色框。对于红色框的效果,这里用的是若用户名或者密码没输入点击登录的时候框框会红色闪烁两次,那就要构造这个empty_error()函数了,其实就是对它的父元素添加CSS效果然后分时间进行显示,那就要用到Html Dom 的setTimeout()方法

 function empty_error(obj)
        {
            var delay = 200;
            var toggleErr = function ()
            {
                obj.addClass("empty_error");
                setTimeout(function () { obj.removeClass("empty_error"); }, delay);
            }
            toggleErr();
            setTimeout(toggleErr, delay * 2);
        }
empty_error()