中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
ASP.NET安全問(wèn)題--Forms驗(yàn)證(后篇)--實(shí)戰(zhàn)篇
              ASP.NET安全問(wèn)題--Forms驗(yàn)證實(shí)戰(zhàn)篇 

       前言:通過(guò)之前的幾篇文章,相信大家對(duì)Forms驗(yàn)證有了一定的了解,也清楚了Identity,IPrincipal,票據(jù)等概念。之前的文站一直沒(méi)有把驗(yàn)證和數(shù)據(jù)庫(kù)聯(lián)系起來(lái),本篇就從這方面講解,用代碼來(lái)演示!而且代碼中也涉及到一些角色授權(quán)的問(wèn)題,為之后的文章伏筆!
 
       今天話題如下:

       驗(yàn)證流程講述
       數(shù)據(jù)庫(kù)準(zhǔn)備
       代碼編寫


       驗(yàn)證流程講述

 

       我們首先假設(shè)一個(gè)場(chǎng)景:用戶現(xiàn)在已經(jīng)打開(kāi)了我們的首頁(yè)Default.aspx,但是有些資源只能是登錄用戶才可以看到的,那么如果這個(gè)用戶想要查看這些資源,那么他就要登錄。而且這個(gè)用戶已經(jīng)有了一個(gè)賬號(hào)。(我們本篇主要的話題是身份驗(yàn)證,至于創(chuàng)建用戶賬戶是怎么創(chuàng)建的,我們不關(guān)心,方法很多,如直接一個(gè)數(shù)據(jù)庫(kù)插入就行了!)
 
       我們現(xiàn)在就把我們的一些流程說(shuō)下:
       1.用戶登錄,在輸入框中輸入用戶名和密碼信息
       2.點(diǎn)擊登錄按鈕后,到數(shù)據(jù)庫(kù)中查詢?cè)撚脩羰欠翊嬖?br>       3 如果存在,服務(wù)器端代碼就創(chuàng)建一個(gè)身份驗(yàn)證的票據(jù),保存在cookie中,然后發(fā)送到客戶端的瀏覽器
       4.用戶已經(jīng)有了驗(yàn)證的cookie,那么就頁(yè)面就跳轉(zhuǎn)到用戶之前請(qǐng)求的頁(yè)面
 
 

       數(shù)據(jù)庫(kù)準(zhǔn)備

       那么下面我們就開(kāi)始詳細(xì)講述:
       首先,我們我們肯定要先得創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),我們就取名為L(zhǎng)ogin表,創(chuàng)建一個(gè)用戶信息表,我們?cè)谠诒碇薪⑷齻€(gè)字段UserName,UserPassword,UserRole(大家可以創(chuàng)建更多字段,我這里只是演示,大家可以擴(kuò)展的).  至于表中的數(shù)據(jù),大家自己隨便插入幾條!
 
       代碼編寫
       因?yàn)槲覀兂3R?yàn)證用戶,所以我們把驗(yàn)證用戶的代碼寫成一個(gè)方法放在App_Code目錄下的Helpers.cs類中
       代碼如下:


public static bool ValidateUser(string username, string password)
{
      
    SqlConnection con 
= new SqlConnection();
    con.ConnectionString 
=
        ConfigurationManager.ConnectionStrings[“MyConnectionString”].ConnectionString;

    SqlCommand com 
= new SqlCommand();
    com.Connection 
= con;
    com.CommandText 
= “Select Count(*) From Users Where Username=@Username and UserPassword=@Password”;

    com.Parameters.AddWithValue(“@Username”, username);
    com.Parameters.AddWithValue(“@Password”, password);
    con.Open();

    
int cnt = (int)com.ExecuteScalar();
    con.Close();

    
return (cnt > 0);
}
 
      然后我們就創(chuàng)建一個(gè)登錄的頁(yè)面Login.aspx,在頁(yè)面上面放入兩個(gè)TextBox,分別用來(lái)供用戶輸入用戶名和密碼。
      放上一個(gè)按鈕,用來(lái)登錄。
      
      回到Helpers.cs中,我再添加一個(gè)方法,來(lái)獲取用戶的角色:
      

public static string  GetRoleForUser(string username )
{
        
//創(chuàng)建鏈接
    SqlConnection con = new SqlConnection();
    con.ConnectionString 
=
        ConfigurationManager.ConnectionStrings[“MyConnectionString”].ConnectionString;

    SqlCommand com 
= new SqlCommand();
    com.Connection 
= con;

        
//執(zhí)行命令
    com.CommandText = “Select UseRole m Users Where Username=@Username;
    com.Parameters.AddWithValue(“@Username”, username);
         
    con.Open();

        
//返回結(jié)果
    string userRole= (string)com.ExecuteScalar();


    con.Close();
         
}
      
 
      為了啟動(dòng)Forms驗(yàn)證,我們還得到web.config文件中配置,如下:
      
<authentication mode=”Forms”>
    
<forms name=”.mycookie” path=”/” loginUrl=”Login.aspx” protection=”All”
timeout=”40” />
</authentication>
 
      并且不允許匿名用戶訪問(wèn)我們的網(wǎng)站 :
 
 
<authorization>
  
<deny users=”?”/>
</authorization>
 
      然后我們就開(kāi)始在Login.aspx的登錄按鈕下面寫代碼了:
 
      基本思想如下:
      1.驗(yàn)證用戶是否存在,
      2.如果存在,同時(shí)獲取用戶的角色
      3.創(chuàng)建身份驗(yàn)證票據(jù)和cookie,并且發(fā)送到客戶端的瀏覽器中
      
     代碼都加了注釋,通過(guò)之前的基礎(chǔ),相信大家可以對(duì)下面的代碼沒(méi)有問(wèn)題。
 

Code
protected void LoginCallback(object sender, EventArgs e)
{
    
if (Helpers.ValidateUser(UserName.Text, Password.Text))
    {
                
//獲取用戶的角色
        string     rolenames = Helpers.GetRolesForUser(UserName.Text);
    
                
//創(chuàng)建身份驗(yàn)證票據(jù)
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                UserName.Text, DateTime.Now, DateTime.Now.AddSeconds(
40), false, roles);

                
//加密票據(jù)
        string encryptedTicket = FormsAuthentication.Encrypt(ticket);

                
//創(chuàng)建新的cookie
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName);
               
                
//把加密后的票據(jù)信息放入cookie
        cookie.Value = encryptedTicket;

                
//把cookie添加到響應(yīng)流中
        Response.Cookies.Add(cookie);

                
//把cookie發(fā)送到客戶端
        Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName.Text,false),true);

    }
}
 
      
      好了,現(xiàn)在如果我們正確的輸入用戶名和密碼,那么我們的瀏覽器中就有了身份驗(yàn)證的cookie了,現(xiàn)在我們的頁(yè)面就要馬上從原來(lái)的Login.aspx轉(zhuǎn)向到Default.aspx頁(yè)面了,我們現(xiàn)在把這個(gè)轉(zhuǎn)向的過(guò)程在頭腦中把它慢速化,因?yàn)槲覀円治鲞@個(gè)過(guò)程。

       在Login.aspx轉(zhuǎn)向到Default.aspx頁(yè)面跳轉(zhuǎn)的過(guò)程中,其實(shí)我們?cè)谡?qǐng)求Default.aspx頁(yè)面,這個(gè)我們之前請(qǐng)求的過(guò)程沒(méi)有任何的區(qū)別,也是一樣要經(jīng)歷ASP.NET的一些生命周期,但是這次我們的瀏覽器中已經(jīng)有了身份驗(yàn)證的cookie,ASP.NET運(yùn)行時(shí)在處理,在處理Application_AuthenticateRequest事件時(shí)就要解析我們的cookie了。其實(shí)在之前我們登錄之前,在這個(gè)事件代碼中也解析了cookie的,只是那時(shí)候沒(méi)有找到cookie而以。

       Application_AuthenticateRequest事件的代碼中,其實(shí)就是解析cookie,然后把用戶的身份標(biāo)識(shí),并且把用戶的身份信息保存起來(lái):
 
 
 

Code
Code
void Application_AuthenticateRequest(object sender, EventArgs e)
{
    HttpApplication app 
= (HttpApplication)sender;

        
//獲取身份驗(yàn)證的cookie
    HttpCookie cookie = Request.Cookies[FormsAuthentication.FormsCookieName];

    
if (cookie != null)
    {
        
string encryptedTicket = cookie.Value;

                
//解密cookie中的票據(jù)信息
        FormsAuthenticationTicket ticket =
            FormsAuthentication.Decrypt(encryptedTicket);

                
//獲取用戶角色信息
        string[] roles = new string[]{ticket.UserData.toString()};

               
//創(chuàng)建用戶標(biāo)識(shí)
        FormsIdentity identity = new FormsIdentity(ticket);

                
//創(chuàng)建用戶的主體信息
        System.Security.Principal.GenericPrincipal user =
        
new System.Security.Principal.GenericPrincipal(identity, roles);
        app.Context.User 
= user;
    }
}
 
      我們看到最后一行代碼:app.Context.User = user;,把用戶的身份以及角色信息保存在了User屬性中。
 
      我們就可以在頁(yè)面中通過(guò)如下方法判斷用戶是否登錄了:
      
 if (Page.User.Identity.IsAuthenticated)
  {
                        
//

  }
 
      用下面的方法判斷用戶是否屬于某個(gè)角色:
      
if (Page.User.IsInRole("Admin")
{
     
//

}
原文出處: http://www.cnblogs.com/yanyangtian/archive/2009/06/01/1493722.html
標(biāo)簽: asp.net安全
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Asp
關(guān)于Forms驗(yàn)證 - 科比的日志 - 網(wǎng)易博客
編程中國(guó) - 利用ASP.NET框架創(chuàng)建網(wǎng)站登陸
AD 單點(diǎn)登錄以及windows認(rèn)證詳細(xì)說(shuō)明
ASP.NET 實(shí)現(xiàn)多站點(diǎn)統(tǒng)一登錄
ASP.NET安全問(wèn)題--Forms驗(yàn)證的具體介紹(上)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服