• Forms验证


    登陆页:

    namespace Booksir.Domain.Web
    {
        public partial class Login : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }
            protected void btnLogin_Click(object sender, AjaxEventArgs e)
            {
                string UserName = this.txtUserName.Text;
                string UserPwd = this.txtPassWord.Text;
                UserBll userbll = new UserBll();
                if (this.rAgent.Checked)
                {
                    if (userbll.LoginUser(UserName, UserPwd, 0))
                    {
                        UserLogin(UserName, UserPwd, 0
                    }
                    else
                    {
                        Ext.Msg.Alert("登陆错误", "用户名或密码出现错误!").Show();
                    }
                }
                else if (this.rEmployee.Checked)
                {
                    if (userbll.LoginUser(UserName, UserPwd, 1))
                    {
                        UserLogin(UserName, UserPwd, 1);
                    }
                    else
                    {
                        Ext.Msg.Alert("登陆错误", "用户名或密码出现错误!").Show();
                    }
                }
                else
                {
                    Ext.Msg.Alert("登陆错误", "用户名或密码出现错误!").Show();
                }
            }

    namespace Booksir.Domain.Web.webBll
    {
        public class BasePage:System.Web.UI.Page
        {
            public void UserLogin(string UserName, string UserPwd, int URole)
            {
                string userInfo = UserName + "|" + URole.ToString();
                string userURole = URole.ToString().Trim();
                FormsAuthenticationTicket Ticket = null;
                Ticket = new FormsAuthenticationTicket(1, userInfo, DateTime.Now, DateTime.Now.AddHours(88888), false, userURole, "/");
                string HashTicket = FormsAuthentication.Encrypt(Ticket);
                //生成客户端Cookie
                HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);

                Context.Response.Cookies.Add(UserCookie);
                if (Context.Request["ReturnUrl"] != null)
                    Context.Response.Redirect(Context.Request["ReturnUrl"]);
                else
                    System.Web.HttpContext.Current.Response.Redirect("Default.aspx");
            }

            public static string[] GetUserInfo()
            {
                return HttpContext.Current.User.Identity.Name.Split('|');
            }

        }
    }


        }
    }

    test.aspx页代码:

    读出来:

    using System.Web.UI;
    using System.Web.Security;
    using System.Web.UI.WebControls;

    namespace Booksir.Domain.Web
    {
        public partial class test : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write(GetUserInfo()[1].ToString());
            }
            public static string GetUserRole()
            {
                FormsIdentity Id = (FormsIdentity)HttpContext.Current.User.Identity;
                //取得身份验证票
                FormsAuthenticationTicket Ticket = Id.Ticket;
                //设置用户角色
                return Ticket.UserData;
            }
            public static string[] GetUserInfo()
            {
                return HttpContext.Current.User.Identity.Name.Split('|');
            }
        }
    }

    web.config配置

        <authentication mode="Forms">
          <forms loginUrl="Login.aspx" name="BooksirDomain" protection="All" timeout="20" path="/"></forms>
        </authentication>
        <authorization>
          <deny users="?"/>
        </authorization>

    接下来是别人的一个实例:

    户文件夹(我们暂定user文件夹):只有用户登录以后才能访问。否则该访客只能访问user文件夹的登录页面(user_login.aspx)
    管理员文件夹( 暂定admin文件夹):管理员文件夹不让任何人服务,当用户登录以后只能访问管理员登陆页(admin_login.aspx),管理员登陆后才能访问全部页面。
    根目录:根目录可以让任何人访问。

    目录结构如下:


    第一步:
        根目录下config代码:
         <authentication mode="Forms">    
           <forms name="UserCookies" loginUrl="Default.aspx"></forms>
          </authentication>
          <authorization>
            <allow users="*"/>
          </authorization>

    第二部:
        Global.asax
        头部添加
         <%@ Import Namespace="System.Security.Principal" %>


         void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            if (HttpContext.Current.User != null)
            {
                //如果用户通过验证,则该项不为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 = new GenericPrincipal(id, roles);//重新分配角色
                    }
                }
            }
        }

    第三部:
    admin文件夹config 文件

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <appSettings/>
    <connectionStrings/>
    <location path="admin_login.aspx">
        <system.web>
          <authorization>
            <allow roles="user"/>
          </authorization>
        </system.web>
    </location>
    <system.web>
        <authorization>
          <allow roles="admin"/>
          <deny users="*"/>
        </authorization>
    </system.web>
    </configuration>

    admin_login.aspx


    cs 代码如下:
    protected void Button1_Click(object sender, EventArgs e)
        {
            if (tbUserName.Text == "xiaomiao")
            {
                //生成验证票据,其中包括用户名、生效时间、过期时间、是否永久保存和用户数据等。而关于用户角色的信息,我们保存在用户数据中。
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "Admin");
                string cookieStr = FormsAuthentication.Encrypt(ticket);//对票据进行加密
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);
                /*保存到cookie中。cookie的名字要与我们前面在配置文件中所写的name值一样。因为,当cookie保留在本地后,下次再检查用户权限的时候就会自动查找与forms名称相同的cookie,并传送给服务器端进行检验。如果在本地找不到cookie,就自然无法通过验证。*/
                cookie.Expires = ticket.Expiration;
                cookie.Path = FormsAuthentication.FormsCookiePath;
                Response.Cookies.Add(cookie);
                Response.Redirect("default.aspx");//登陆成功后跳转到index.aspx
            }
        }


    第四步:

    user文件夹config代码
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <appSettings/>
        <connectionStrings/>
    <location path="user_login.aspx">
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
    </location>
        <system.web>
          <authorization>
            <allow roles="user,admin"/>
            <deny users="*"/>
          </authorization>
        </system.web>
    </configuration>

    user_login.aspx

    CS代码:
    protected void Page_Load(object sender, EventArgs e)
        {
            //判断用户是否已经登陆,且角色为user
            if (User.Identity.IsAuthenticated && User.IsInRole("user"))
            {//如果通过验证,则直接跳转到index.aspx
                Response.Redirect("default.aspx");
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (tbUserName.Text == "xiaomiao")
            {
                //生成验证票据,其中包括用户名、生效时间、过期时间、是否永久保存和用户数据等。而关于用户角色的信息,我们保存在用户数据中。
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "User");
                string cookieStr = FormsAuthentication.Encrypt(ticket);//对票据进行加密
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);
                /*保存到cookie中。cookie的名字要与我们前面在配置文件中所写的name值一样。因为,当cookie保留在本地后,下次再检查用户权限的时候就会自动查找与forms名称相同的cookie,并传送给服务器端进行检验。如果在本地找不到cookie,就自然无法通过验证。*/
                cookie.Expires = ticket.Expiration;
                cookie.Path = FormsAuthentication.FormsCookiePath;
                Response.Cookies.Add(cookie);
                Response.Redirect("default.aspx");//登陆成功后跳转到index.aspx
            }

        }

    -------长沙程序员技术交流QQ群:428755207-------
  • 相关阅读:
    九度OJ 1031:xxx定律 (基础题)
    九度OJ 1030:毕业bg (01背包、DP)
    九度OJ 1029:魔咒词典 (排序)
    九度OJ 1028:继续畅通工程 (最小生成树)
    九度OJ 1027:欧拉回路 (欧拉回路)
    九度OJ 1026:又一版 A+B (进制转换)
    九度OJ 1025:最大报销额 (01背包、DP)
    九度OJ 1024:畅通工程 (最小生成树)
    九度OJ 1023:EXCEL排序 (排序)
    九度OJ 1022:游船出租 (统计)
  • 原文地址:https://www.cnblogs.com/qq4004229/p/1819344.html
Copyright © 2020-2023  润新知