欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

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

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于Forms驗證 - 科比的日志 - 網(wǎng)易博客

關(guān)于Forms驗證

關(guān)于Forms驗證的最好的教程,我覺(jué)得是microsoft press 出的黑皮書(shū)《microsoft.net 程序設計技術(shù)內幕》里的關(guān)于這一部分的講解,此書(shū)的中文版由清華大學(xué)出版社出版。大家方便找到的話(huà),可以看看。

窗體驗證是asp.net最酷的新特性之一。簡(jiǎn)單說(shuō),窗體驗證是一種安全機制,它通過(guò)要求用戶(hù)在web窗體中輸入憑據(通常是用戶(hù)名和密碼)來(lái)驗證用戶(hù)身份。您可以在web.config中指定登錄頁(yè)面并告訴asp.net登錄頁(yè)面保護什么資源。當用戶(hù)第一次試圖訪(fǎng)問(wèn)被保護資源時(shí),asp.net會(huì )把用戶(hù)重新定向到您的登錄頁(yè)面。如果登陸成功,asp.net會(huì )以cookie的形式發(fā)給用戶(hù)一個(gè)驗證票據,并把用戶(hù)重定向到最初請求的頁(yè)面。這張票據使得用戶(hù)不必重復登錄,就可以多次訪(fǎng)問(wèn)您站點(diǎn)上的被保護內容。您控制這張票據的生存期,所以由您決定登錄適用于多長(cháng)時(shí)間。

上面這段話(huà)明白嗎?我們可以想以前asp的時(shí)候,要保護的頁(yè)面都會(huì )有對cookie(或session)的判斷,根據cookie的值來(lái)判斷用戶(hù)是否有訪(fǎng)問(wèn)這個(gè)頁(yè)的權力。而具體做的時(shí)候,都是先要求用戶(hù)登陸,成功后就把用戶(hù)信息保存在cookie里面,然后用戶(hù)就可以訪(fǎng)問(wèn)受保護的頁(yè)。而現在asp.net提供了一種更加方便的功能來(lái)替你完成這些工作,就是上面說(shuō)的Forms驗證。就像分頁(yè),以前asp不也替你完成了嘛,可是到了asp.net這里,就得自己動(dòng)手了……

過(guò)程是先建一個(gè)文件夾,然后把要保護的頁(yè)面放進(jìn)去,接著(zhù)設置一下web,config,這樣就完成了保護。如果你要訪(fǎng)問(wèn)這個(gè)文件夾,就會(huì )被強制轉到預先設定的登錄頁(yè)面,你填上正確的用戶(hù)名和密碼,提交,系統驗證后,就把你的登陸信息寫(xiě)到cookie里面,這樣你再去訪(fǎng)問(wèn)那個(gè)文件夾,就可以進(jìn)去了,因為你的登陸憑證已經(jīng)保存到cookie里面了,系統檢查后,知道你不是壞人,于是就……這個(gè)過(guò)程還是和以前asp時(shí)的過(guò)程差不多。

下面是具體的操作,先要建一個(gè)asp.net應用程序,這里面至少要有一個(gè)登錄用的頁(yè)面,然后修改你的根目錄下的web.config,把驗證那一塊改成Forms驗證模式。

[Copy to clipboard] [ - ]

CODE:

<authentication mode="Forms" >

<forms loginUrl="login.aspx">

</forms>

</authentication>

注意里面有一個(gè)forms節,定義了登錄頁(yè)面的位置,如果不指定,則默認是根目錄下的login.aspx,還有,里面是區分大小寫(xiě)的。

通過(guò)這個(gè)設置,系統就知道這個(gè)asp.net應用程序使用Forms驗證。

接下來(lái)在要保護的文件夾里放一個(gè)web.config,要注意的是,這個(gè)子文件夾里的web.config的實(shí)際內容不能像根目錄下的那個(gè)一樣多,否則就會(huì )出現“配置錯誤”,提示“在應用程序級別以外使用注冊為 allowDefinition='MachineToApplication' 的節是錯誤的。導致該錯誤的原因可能是在 IIS 中沒(méi)有將虛擬目錄作為應用程序進(jìn)行配置。”具體應該怎么做我也不清楚,總之這個(gè)web.config只要有下面的內容就ok了

[Copy to clipboard] [ - ]

CODE:

<configuration>

<system.web>

<authorization>

<deny users="?"></deny>

</authorization>

</system.web>

</configuration>

這是一個(gè)授權節,此節設置應用程序的授權策略??梢栽试S(allow)或拒絕(deny)不同的用戶(hù)或角色訪(fǎng)問(wèn)應用程序資源。通配符: "*" 表示任何人,"?" 表示匿名(未經(jīng)身份驗證的)用戶(hù)??次覀兩厦娴脑O置知道,這樣配置就是拒絕未經(jīng)身份驗證的用戶(hù)訪(fǎng)問(wèn)。

然后可以試試訪(fǎng)問(wèn)那個(gè)受保護的文件夾里的頁(yè)面了,嘿嘿,是不是立刻就被轉到login.aspx了?這就是Forms驗證的威力了,你必須要在這里正確登陸,然后才可以訪(fǎng)問(wèn)受保護的資源。

接下來(lái)自然就是登陸的問(wèn)題了。

想想在asp的時(shí)代,我們的登陸事件是這樣的:

[Copy to clipboard] [ - ]

CODE:

sql="select name,password from yourtable where name="&name&" password="&password

set rs=con.execute(sql)

if not rs.eof

cookie("login")="ok"

end if

上面是基本的過(guò)程了,注意這個(gè)做法是極不安全的,這里只是一個(gè)示例,而在Forms驗證時(shí)的過(guò)程也差不多,即

if(1.輸入的用戶(hù)名和密碼合法) then

2.給用戶(hù)設定登陸憑證

end if

先看第一步,怎樣檢查輸入的用戶(hù)名和密碼合法,這里有兩個(gè)辦法,如果你是把用戶(hù)名和密碼存在數據庫里面,那就用以前的辦法來(lái)解決,比如是islogin(string name,string password)方法,如果你輸入正確的用戶(hù)名和密碼的話(huà),這個(gè)方法就返回true。這個(gè)辦法適用于很多用戶(hù)的時(shí)候。 如果你的用戶(hù)數量很少,那就可以考慮第二種辦法,即把用戶(hù)和密碼放到web.config里。辦法就是在根目錄下的web.config文件中加入一個(gè)credentials節,這個(gè)是包含在forms節里面的

[Copy to clipboard] [ - ]

CODE:

<authentication mode="Forms" >

<forms loginUrl="login.aspx">

<credentials passwordFormat="Clear">

<user name="notus" password="wei"/>

</credentials>

</forms>

</authentication>

在這里設置后,程序中的判斷是用System.Web.Security的FormsAuthentication類(lèi)的一個(gè)方法System.Web.Security.FormsAuthentication.Authenticate(string name,string password),這個(gè)就是用來(lái)根據web.config文件中的credentials節指定的用戶(hù)名和密碼來(lái)進(jìn)行合法性判斷,如果你輸入正確的話(huà),這個(gè)方法就返回true。

驗證完后,就進(jìn)入第二個(gè)步驟給用戶(hù)設定登陸憑證,這里也是用到System.Web.Security的FormsAuthentication類(lèi)的一個(gè)方法

System.Web.Security.FormsAuthentication.RedirectFromLoginPage(string,bool)這個(gè)方法接受兩個(gè)參數,第一個(gè)string是用語(yǔ)cookie身份驗證的用戶(hù)名稱(chēng),一般就用用戶(hù)名,第二個(gè)是bool值,用于指定此cookie是臨時(shí)的,還是永久性的,如果這里用false,那就是臨時(shí)性的。臨時(shí)性的cookie的生存期可以在web.config的forms節中指定

<forms loginUrl="login.aspx" timeout="10">

這里是把超時(shí)時(shí)間設為10分鐘。而永久性cookie的生存期是50年,并且設定后就不可以更改,一般如果選擇永久性的cookie的話(huà),可以通過(guò)編程的辦法來(lái)改變這個(gè)值,畢竟50年實(shí)在是太長(cháng)了。

這個(gè)方法除了設定用戶(hù)登陸憑證外,在最后還會(huì )把用戶(hù)重定向到最初請求的頁(yè)面,即當你沒(méi)有登錄而直接進(jìn)入受保護的文件夾時(shí)想去的那個(gè)頁(yè)面。如一開(kāi)始直接進(jìn)入登錄頁(yè)面,則最后會(huì )轉向根目錄下的default.aspx。

下面是具體的代碼演示,這段代碼是單擊登陸頁(yè)面的提交按鈕后執行的,boxid和boxpd分別是輸入用戶(hù)名和密碼的textbox

[Copy to clipboard] [ - ]

CODE:

第一種,用戶(hù)資料保存于數據庫時(shí)

private void butlogin_Click(object sender, System.EventArgs e)

{

   if(islogin(boxid.Text,boxpd.Text))

     FormsAuthentication.RedirectFromLoginPage(boxid.Text,false);

   else

     Response.Write("error");

}

第二種,用戶(hù)資料保存于web.config時(shí)

private void butlogin_Click(object sender, System.EventArgs e)

{

   if(FormsAuthentication.Authenticate(boxid.Text,boxpd.Text))

     FormsAuthentication.RedirectFromLoginPage(boxid.Text,false);

   else

     Response.Write("error");

}

這就是驗證的基本過(guò)程。

而如果想要注銷(xiāo)登陸,則用System.Web.Security的FormsAuthentication類(lèi)的SignOut()方法

[Copy to clipboard] [ - ]

CODE:

private void butquit_Click(object sender, System.EventArgs e)

{

   FormsAuthentication.SignOut();

}

它返回一個(gè)Set-Cookie頭,將Cookie的值設置為一個(gè)空字符串,并將Cookie的到器日期設置為一個(gè)過(guò)去的日期,從而有效銷(xiāo)毀驗證cookie。

而在實(shí)際情況下,您可能更愿意在頂層web.config文件中完成所有的url授權,而不是把它們分在各自目錄下的web,config文件中。asp.net也支持這種做法。下面這個(gè)web,config文件,放在應用程序根目錄下,它啟用窗體驗證并指定其他的一些設置。假設您要保護的文件夾名為protd。

[Copy to clipboard] [ - ]

CODE:

<configuration>

<system.web>

<authentication mode="Forms" >

<forms loginUrl="login.aspx">

<credentials passwordFormat="Clear">

<user name="notus" password="wei"/>

</credentials>

</forms>

</authentication>

</system.web>

<location path="protd">

<system.web>

<authorization>

<deny users="?"></deny>

</authorization>

</system.web>

</location>

</configuration>

注意它的層次結構,應該有兩個(gè)<system.web>節。完成這個(gè)后,就可以把protd文件夾下的那個(gè)web.config刪掉,然后看看效果如何。

基本的知識就這么多了,其實(shí)Forms驗證還有很多內容,比如怎樣以編程的方式改變永久性cookie的生存期,怎么使用基于角色的驗證等,這些大家找相關(guān)資料研究研究吧。當然還是推薦上面說(shuō)到的那本書(shū),以前關(guān)于Forms驗證的也看了不少資料,但總是不明白,結果昨天一看那本書(shū)的講解,就豁然開(kāi)朗了。

最后再給出我常用的一個(gè)islogin()代碼。希望可以對初學(xué)者有些幫助。

[Copy to clipboard] [ - ]

CODE:

public bool islogin(string name,string password)

{

   bool isok=false;

   string errmsg="ok";

   StringBuilder sbsel=new StringBuilder();

   sbsel.Append("select name,password from youtable where name='");

   sbsel.Append(name);

   sbsel.Append("'");

   try

   {

      cmd=new OleDbCommand(sbsel.ToString(),conn);

      conn.Open();

      OleDbDataReader dr=cmd.ExecuteReader(CommandBehavior.SingleRow);

      if(dr.Read())

      {

         if(dr["password"].ToString()==password)

         isok=true;

      }

      errmsg="login is ok";

   }

   catch(OleDbException ex)

   {

      errmsg=ex.Message;

   }

   finally

   {

      conn.Close();

   }

   return isok;

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
翻譯:Single Sign-On for Everyone - Anders Liu的.NET空間 - 博客園
ASP.NET安全問(wèn)題--Forms驗證(后篇)--實(shí)戰篇
ASP.Net 2.0窗體身份驗證機制詳解(FormsAuthentication)
Asp.net中基于Forms驗證的角色驗證授權 - 知更鳥(niǎo) - DonewsBlog
編程中國 - 利用ASP.NET框架創(chuàng )建網(wǎng)站登陸
FormsAuthentication使用指南
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久