zoukankan      html  css  js  c++  java
  • asp.net中的窗体身份验证(完整篇之四:获得用户数据)

     在《asp.net中的窗体身份验证(完整篇之三:用户登录页面) 》中介绍了如何创建一个自定义身份验证票,如何将自定义的身份验证票写入Cookie中。而在自定义的身份验证票中,可以传递一个用户数据,这个用户数据十分有用。可以用来存放用户权限等级、用户VIP号、用户角色等数据,而这些数据往往可以用来控制用户的权限范围。下面我们来看一下怎么样获得用户数据。

        首先,修改web.config文件,这个就不再多介绍了,不明白的朋友去查看《asp.net中的窗体身份验证(完整篇之一:创建asp.net的窗体身份验证方式) 》和《asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)

        其次,创建用户登录页面,在本例中为AdminLogin.aspx,在单击登录按钮后,代码如下所示:

    1. protected void Button1_Click(object sender, EventArgs e)  
    2. {  
    3.     Label1.Text = "";  
    4.     //用户名   
    5.     string UserName = TextBox1.Text;  
    6.     //密码   
    7.     string UserPassword = TextBox2.Text;  
    8.     //用户角色   
    9.     string UserRole = "";  
    10.     //用户身份验证   
    11.     if ((UserName == "1" && UserPassword == "2") || (UserName == "3" && UserPassword == "4"))  
    12.     {  
    13.         //判断用户权限   
    14.         if (UserName == "1")  
    15.         {  
    16.             UserRole = "admin";  
    17.         }  
    18.         else  
    19.         {  
    20.             UserRole = "reader";  
    21.         }  
    22.         //创建一个身份验证票   
    23.         FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "yundao", DateTime.Now, DateTime.Now.AddMinutes(30), false, UserRole);  
    24.         //将身份验证票加密   
    25.         string EncrTicket = FormsAuthentication.Encrypt(ticket);  
    26.         //创建一个Cookie   
    27.         HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, EncrTicket);  
    28.         //将Cookie写入客户端   
    29.         Response.Cookies.Add(myCookie);  
    30.         //跳转到初始请求页或默认页面   
    31.         Response.Redirect(FormsAuthentication.GetRedirectUrl("yundao",false));  
    32.     }  
    33.     else  
    34.     {  
    35.         Label1.Text = "用户名为1,密码为2,或用户名为3,密码为4。请重新输入。";  
    36.     }  
    37. }  

        在本例中,为了简单起见,只要用户名为1、密码为2,或用户名为3、密码为4,都认为身份验证通过。身份验证通过后,创建一个身份验证票,如果用户名为1,身份验证票中传递的用户数据为“admin”,如果用户名为3,身份验证中传递的用户数据为“reader”。然后加密身份验证票,写入客户端Cookie。

        第三,创建一个test.aspx文件,在该文件中获得用户数据,如以下代码所示。

    1. protected void Page_Load(object sender, EventArgs e)  
    2. {  
    3.     //获得存放身份验证票的Cookie值,这个值是经过加密的   
    4.     string EncrTicket = Request.Cookies[FormsAuthentication.FormsCookieName].Value;  
    5.     //获得身份验证票   
    6.     FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(EncrTicket);  
    7.     //从身份验证票中提取经过验证的用户名   
    8.     string UserName = ticket.Name;  
    9.     //从身份验证票中提取用户数据   
    10.     string UserData = ticket.UserData;  
    11.     Label1.Text = UserName + ",您好!您的权限为:" + UserData;  
    12. }  

        在以上代码中,先使用Request.Cookies获得存放身份验证票的Cookie,其中Cookie名可以通过FormsAuthentication类的FormsCookieName属性获得。

        由于身份验证票是加密后存放在Cookie中的,所以在获得Cookie值之后,必须将身份验证票解密。FormsAuthentication类的Decrypt()方法可以将加密后的身份验证票(也就是存放在Cookie中的字符串)解密,并返回解密后的身份验证票。在asp.net中使用FormsAuthenticationTicket类来代表身份验证票。

        获得解密后的身份验证票后,可以通过FormsAuthenticationTicket类的Name属性返回经过验证的用户名,也可以通过UserData属性获得用户数据。

  • 相关阅读:
    PC逆向之代码还原技术,第三讲汇编中加法的代码还原
    PC逆向之代码还原技术,第二讲寻找程序入口点
    C++STL模板库适配器之优先级队列
    C++STL模板库适配器之queue队列
    C++STL模板库适配器之stack容器
    iBinary C++STL模板库关联容器之map/multimap
    C++STL模板库关联容器之set/multiset
    C++STL模板库序列容器之deque
    C++STL模板库序列容器之List容器
    C++STL模板库序列容器之vector
  • 原文地址:https://www.cnblogs.com/sunshch/p/2526912.html
Copyright © 2011-2022 走看看