发布于 2016-05-29 22:05:25 | 130 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

ASP.NET

ASP.NET 是.NET FrameWork的一部分,是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们。 指 Active Server Pages(动态服务器页面) ,运行于 IIS(Internet Information Server 服务,是Windows开发的Web服务器)之中的程序 。


Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面。
主要思想:Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面。
具体步骤:
    1、创建一个网站,结构如下:
        网站根目录
            Admin目录            ---->    管理员目录
                Manager.aspx        ---->    管理员可以访问的页面
            Users目录            ---->    注册用户目录
                Welcome.aspx        ---->    注册用户可以访问的页面
            Error目录            ---->    错误提示目录
                AccessError.htm        ---->    访问错误的提示页面
            default.aspx            ---->    网站默认页面
            login.aspx            ---->    网站登录页面
            web.config            ---->    网站配置文件
    2、配置web.config如下:
 
        <configuration> 
            <system.web> 
                <!--设置Forms身份验证--> 
                <authentication mode="Forms"> 
                    <forms loginUrl="Login.aspx" name="MyWebApp.APSXAUTH" path="/" protection="All" timeout="30"/> 
                </authentication> 
                <authorization> 
                    <allow users="*"/> 
                </authorization> 
            </system.web> 
        </configuration> 

        <!--设置Admin目录的访问权限--> 
        <location path="Admin"> 
            <system.web> 
                <authorization> 
                    <allow roles="Admin"/> 
                    <deny users="?"/> 
                </authorization> 
            </system.web> 
        </location> 
        <!--设置Users目录的访问权限--> 
        <location path="Users"> 
            <system.web> 
                <authorization> 
                    <allow roles="User"/> 
                    <deny users="?"/> 
                </authorization> 
            </system.web> 
        </location> 

    3、在login.aspx页面的登录部分代码如下:
 
        protected void btnLogin_Click(object sender, EventArgs e) 
        {     
            //Forms身份验证初始化 
            FormsAuthentication.Initialize(); 
            //验证用户输入并得到登录用户,txtName是用户名称,txtPassword是登录密码 
            UserModel um = ValidUser(txtName.Text.Trim(),txtPassword.Text.Trim()); 
            if (um != null) 
            { 
             //创建身份验证票据 
             FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
                                            um.Name, 
                                            DateTime.Now, 
                                            DateTime.Now.AddMinutes(30), 
                                            true, 
                                            um.Roles,//用户所属的角色字符串 
                                            FormsAuthentication.FormsCookiePath); 
             //加密身份验证票据 
             string hash = FormsAuthentication.Encrypt(ticket); 
             //创建要发送到客户端的cookie 
             HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 
             if (ticket.IsPersistent) 
             { 
                cookie.Expires = ticket.Expiration; 
             } 
             //把准备好的cookie加入到响应流中 
             Response.Cookies.Add(cookie); 

             //转发到请求的页面 
             Response.Redirect(FormsAuthentication.GetRedirectUrl(um.Name,false)); 
            } 
            else 
            { 
             ClientScriptManager csm = this.Page.ClientScript; 
             csm.RegisterStartupScript(this.GetType(), "error_tip", "alert('用户名或密码错误!身份验证失败!');", true); 
            } 
        }     
        //验证用户 
        private UserModel ValidUser(string name, string password) 
        { 
            return new UserService().Validate(name, password); 
        } 

    4、给网站添加处理程序Global.asax,其中通用身份验证代码如下:
 
        //改造原来的User,给其添加一个用户所属的角色数据 
        protected void Application_AuthenticateRequest(object sender, EventArgs e) 
        { 
            if (HttpContext.Current.User != null ) 
            { 
                if (HttpContext.Current.User.Identity.IsAuthenticated) 
                { 
                    if (HttpContext.Current.User.Identity is FormsIdentity) 
                    { 
                        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; 
                        FormsAuthenticationTicket ticket = id.Ticket; 

                        string userData = ticket.UserData; 
                        string[] roles = userData.Split(','); 
                        //重建HttpContext.Current.User,加入用户拥有的角色数组 
                        HttpContext.Current.User = new GenericPrincipal(id, roles); 
                    } 
                } 
            } 
        } 

    5、在Admin目录中Manager.aspx页面加载代码如下:
 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            //判断通过身份验证的用户是否有权限访问本页面 
            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; 
            //判断通过身份验证的用户是否是Admin角色 
            if (!id.Ticket.UserData.Contains("Admin")) 
            { 
                //跳转到访问权限不够的错误提示页面 
                Response.Redirect("~/Error/AccessError.htm", true); 
            } 
        } 
        //安全退出按钮的代码 
        protected void btnExit_Click(object sender, EventArgs e) 
        { 
            //注销票据 
            FormsAuthentication.SignOut(); 
            ClientScriptManager csm = this.Page.ClientScript; 
            csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert('您已经安全退出了!');", true); 
        } 

    6、在Users目录中Welcome.aspx页面加载代码如下:
 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            //判断通过身份验证的用户是否有权限访问本页面 
            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; 
            //判断通过身份验证的用户是否是User角色 
            if (!id.Ticket.UserData.Contains("User")) 
            { 
                //跳转到访问权限不够的错误提示页面 
                Response.Redirect("~/Error/AccessError.htm", true); 
            } 
        } 
        //安全退出按钮的代码 
        protected void btnExit_Click(object sender, EventArgs e) 
        { 
            //注销票据 
            FormsAuthentication.SignOut(); 
            ClientScriptManager csm = this.Page.ClientScript; 
            csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert('您已经安全退出了!');", true); 
        } 

测试结果:
    数据:
        假设有3个用户,如下:
        ------------------------------------------
        用户名        密码        角色字符串
        ------------------------------------------
        sa        sa        Admin,User
        admin        admin        Admin
        user        user        User
        ------------------------------------------
    测试:
        如果使用admin登录,只能访问Admin目录的Manager.aspx页面;
        如果使用user登录,只能访问Users目录的Welcome.aspx页面;
        使用sa登录,既能访问Admin目录的Manager.aspx页面,又能访问Users目录的Welcome.aspx页面。
    注意:测试时注意及时点击安全退出按钮,否则影响测试结果。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务