亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

淺談asp.net Forms身份驗證詳解

2024-07-10 13:31:39
字體:
來源:轉載
供稿:網友

在做網站的時候,都會用到用戶登錄的功能。對于一些敏感的資源,我們只希望被授權的用戶才能夠訪問,這讓然需要用戶的身份驗證。對于初學者,通常將用戶登錄信息存放在Session中,筆者在剛接觸到asp.net的時候就是這么做的。當我將用戶信息存在在Session中時,常常會遇到Session丟失導致用戶無法正常訪問被授權的資源,保持用戶登錄狀態時的安全性問題,無休其實,在asp.net中,我們有更好的解決方案,那就是通過Forms身份驗證,從而對用戶進行授權,這種方法可以輕松的保持用戶的登錄狀態(如果用戶想這樣),便捷的用戶授權配置,增強的安全性等好處。廢話不再多說,下面我們來做一個簡單的用

在做例子之前,我們先定義如下用戶類,類名為SampleUser,代碼如下:

public partial class SampleUser  {    string username;    public string UserName    {      get { return username; }      set { username = value; }    }    string userpwd;    public string UserPWD    {      get { return userpwd; }      set { userpwd = value; }    }    public override bool Equals(object obj)    {      SampleUser other = obj as SampleUser;      if (other == null || other.UserName != this.UserName)        return false;      return true;    }  }  public partial class SampleUser  {    public static List<SampleUser> userList = new List<SampleUser> {      new SampleUser() { UserName = "01", UserPWD = "123"},       new SampleUser() { UserName = "02", UserPWD = "123" },       new SampleUser() { UserName = "03", UserPWD = "123" },       new SampleUser() { UserName = "04", UserPWD = "123" },     };    public static SampleUser GetUser(string userName)    {      return userList.Find(u=>u.UserName == userName);    }  }

在類SampleUser中,定義了UserName和UserPWD兩個字段,分別用來存儲用戶的登錄名和密碼信息。在SampleUser類的另一部分中,我們提供了一個用戶的靜態類表,用來代替存儲在數據庫中的用戶信息,提供一個方法GetUser,用來獲取用戶信息。

在這個例子中,我們演示用戶必須進行登錄才能訪問網站的資源,如果沒有登錄,則將用戶導航到login.aspx頁面中。

第一步,在web.config中添加配置信息,說明網站要使用Forms身份驗證,并指定登錄頁面和默認登錄成功后的跳轉頁面,然后指定拒絕未登錄用戶的訪問,代碼如下:

<authentication mode="Forms">   <forms loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" />  </authentication>  <authorization>   <deny users="?"/>  </authorization>

完成這一步后,我們再打開Default.aspx頁面,在沒有登錄的情況下,頁面會被導航到Login.aspx頁面,我們的第一步的目的已經達到了。

第二步,完成Login.aspx的頁面邏輯。在頁面中添加兩個TextBox控件,用來輸入用戶名和密碼;添加一個CheckBox控件,用來選擇是否保持登錄狀態;添加一個Button控件,響應用戶的登錄操作。相應的代碼如下:

<fieldset>    <legend>用戶登陸</legend>    <div>      用戶名:<asp:TextBox ID="txtUserID" runat="server" Width="150" /><br /><br />      密   碼:<asp:TextBox ID="txtUserPWD" runat="server" TextMode="Password" Width="150" /><br /><br />      <asp:CheckBox ID="cbSaveUserName" runat="server" Checked="true" Text="保持登錄狀態" />    </div><br />    <asp:Literal ID="ltMessage" Text="" runat="server" Visible="false" />    <br />    <p>      <asp:Button ID="btnLogin" Text="登陸" runat="server" OnClick="btnLogin_Click" />    </p>  </fieldset>

接下來完成后臺代碼,添加登陸按鈕的后臺處理方法:對用戶名和密碼進行驗證,如果驗證通過,則為用戶名創建一個身份驗證票據,并將其添加到響應的Cookie中。代碼如下:

protected void btnLogin_Click(object sender, EventArgs e)    {      string userID = this.txtUserID.Text.Trim();      string userPWD = this.txtUserPWD.Text.Trim();      SampleUser userEx = SampleUser.GetUser(userID);      if (userEx == null)      {        ltMessage.Text = "用戶不存在!";        ltMessage.Visible = true;        return;      }      if (userEx.UserPWD != userPWD)      {        ltMessage.Text = "用戶名或密碼錯誤,請重新輸入!";        ltMessage.Visible = true;        return;      }      //添加票據,并將用戶導航到默認頁面      FormsAuthentication.RedirectFromLoginPage(userEx.UserName, this.cbSaveUserName.Checked);    }

完成這一步后,我們就已經完成了簡單Froms驗證的功能。運行程序,你會發現,這里存在一個問題?。。?/p>

你發現了嗎?當我們被導航到login.aspx時,這個頁面的樣式丟失了!這是因為我們對整個網站的資源進行了訪問限制,如果沒有登陸,用戶不僅無法訪問.aspx頁面,甚至連css文件、js文件都無法訪問。顯然,這不是我們想要的,因為這些資源并不是敏感的資源。在通常情況下,我們只希望對部分文件夾中的文件進行驗證訪問限制,而不是整個網站,例如,我們允許只對User文件夾下的頁面進行訪問限制,因為這個文件夾中存放的是用戶的私人信息,這些信息是敏感的。這該如何實現呢?

為了完成演示分目錄驗證,我們在項目中添加一個User文件夾,并添加UserInfo.aspx、 UserLogin.aspx兩個頁面。UserInfo.aspx用來展示用戶信息,它的業務邏輯我們不是我們關心的,UserLogin.aspx頁面用來讓用戶登陸,代碼跟Login.aspx頁面幾乎完全相同。

第一步:修改Web.config文件,允許匿名用戶訪問系統資源。

 <authorization>   <allow users="?"/>  </authorization>

第二步:在User文件夾下添加一個Web.config文件,修改代碼,拒絕匿名用戶訪問該文件夾下的資源。

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

完成這兩步后,我們訪問UserInfo.aspx時,如果沒有登陸,則會被導航到~/User/UserLogin.aspx頁面,當登陸后,又會被導航到~/User/UserInfo.aspx頁面。這個時侯,我們的登陸頁面樣式并沒有丟失,這說明我們的配置文件起作用了。

接下來,我們想在UserInfo.aspx頁面中顯示出已登陸用戶的用戶名和密碼(這里完全是為了演示如何獲取登陸用戶數據才這樣做的,通常用戶的密碼是不會展示的)。在進行登陸后,用戶的票據信息被加密保存在Cookie中,這個票據中,有已登錄用戶的名稱信息,我們通過獲取票據中的用戶名,即可獲取到完整的用戶信息。

為了顯示用戶信息,我們在頁面中放置兩個Label控件,代碼如下:

<h2><p>用戶名:<asp:Label ID="lblUserName" Text="" runat="server" /></p><p>密    碼:<asp:Label ID="lblUserPWD" Text="" runat="server" /></p></h2>

然后,我們在頁面的Load方法中,獲取并展示用戶信息:

if (this.Context.User != null && this.Context.User.Identity != null && this.Context.User.Identity.IsAuthenticated){  SampleUser user = SampleUser.GetUser(this.Context.User.Identity.Name);  if (user != null)  {    this.lblUserName.Text = user.UserName;    this.lblUserPWD.Text = user.UserPWD;  }}

再次運行我們的代碼,當用戶登陸后(如果保持登陸狀態,即使關掉并重新打開瀏覽器),我們都可以獲取到已登錄用戶的Name,從而獲取用戶的對象。

如果要退出登陸,我們只需要刪除保存在Cookie中的票證信息即可,這個功能Forms驗證已經幫我們完成,代碼很簡單:

FormsAuthentication.SignOut();  //退出登陸

在本文中,沒有涉及到角色的驗證,這是因為通過在配置文件中指定角色這種方法并不夠靈活,如果角色是可以在程序中維護的,那么我們在這里的指定就形同虛設了。感興趣的朋友可以自行學習,也并不復雜。在本文的結尾,附上詳細的Forms驗證在Web.config中的配置說明:

<forms    name="name"    loginUrl="URL"    defaultUrl="URL"   protection="[All|None|Encryption|Validation]"   timeout="[MM]"   path="path"   requireSSL="[true|false]"   slidingExpiration="[true|false]">   enableCrossAppRedirects="[true|false]"   cookieless="[UseUri|UseCookie|AutoDetect|UseDeviceProfile]"    domain="domain name"   ticketCompatibilityMode="[Framework20|Framework40]">   <credentials>...</credentials> </forms>
  • name:指定要用于身份驗證的 HTTP Cookie。如果正在一臺服務器上運行多個應用程序并且每個應用程序都需要唯一的 Cookie,則必須在每個應用程序的 Web.config 文件中配置 Cookie 名稱。默認值為 ".ASPXAUTH"。
  • loginUrl:指定如果找不到任何有效的身份驗證 Cookie,將請求重定向到的用于登錄的 URL。默認值為 login.aspx。
  • defaultUrl:定義在身份驗證之后用于重定向的默認 URL。默認值為 "default.aspx"。
  • protection:指定 Cookie 使用的加密類型(如果有)。默認值為 All。
  • timeout:指定 Cookie 過期前逝去的時間(以整數分鐘為單位)。如果 SlidingExpiration 屬性為 true,則 timeout 屬性是滑動值,會在接收到上一個請求之后的指定時間(以分鐘為單位)后過期。 為防止危及性能并避免向開啟 Cookie 警告的用戶發出多個瀏覽器警告,當指定的時間逝去大半時將更新 Cookie。這可能導致精確性受損。默認值為 "30"(30 分鐘)。
  • path:為應用程序發出的 Cookie 指定路徑。默認值是斜杠 ( /),這是因為大多數瀏覽器是區分大小寫的,如果路徑大小寫不匹配,瀏覽器不會送回 Cookie。
  • requireSSL:指定是否需要 SSL 連接來傳輸身份驗證 Cookie。默認值為 False。
  • slidingExpiration:指定是否啟用可調過期時間??烧{過期將 Cookie 的當前身份驗證時間重置為在單個會話期間收到每個請求時過期。默認值為 True。
  • enableCrossAppRedirects:表明是否將通過身份驗證的用戶重定向到其他 Web 應用程序中的 URL。默認值為 False。
  • cookieless:定義是否使用 Cookie 以及 Cookie 的行為。默認值為 UseDeviceProfile.
  • domain:指定在傳出 Forms 身份驗證 Cookie 中設置的可選域。此設置的優先級高于 httpCookies 元素中使用的域。默認值為空字符串 ("")。
  • ticketCompatibilityMode:指定在 Forms 身份驗證中對于票證到期日期使用協調世界時 (UTC) 還是本地時間。默認值為 Framework20。

子元素 credentials:允許選擇在配置文件中定義名稱和密碼憑據。您還可以實現自定義的密碼架構,以使用外部源(如數據庫)來控制驗證。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品美女视频明星a级| 欧美午夜精品久久久久久人妖| 日韩毛片在线观看| 久久久爽爽爽美女图片| 亚洲人精选亚洲人成在线| 国产在线视频2019最新视频| 日韩精品中文字幕在线观看| 亚洲精品suv精品一区二区| 91国内在线视频| 亚洲精品国产精品国自产在线| 精品久久香蕉国产线看观看gif| 成人精品视频在线| 久久精品成人动漫| 久久成人精品一区二区三区| 久久国产一区二区三区| 欧美野外wwwxxx| 欧美日韩综合视频网址| 成人午夜激情网| 久久香蕉频线观| 国产成人av在线| 亚洲男女性事视频| 久久天天躁日日躁| 91精品在线播放| 欧美重口另类videos人妖| 国产suv精品一区二区三区88区| 亚洲国产精品福利| 一道本无吗dⅴd在线播放一区| 夜夜嗨av一区二区三区四区| 亚洲国产精品va在线观看黑人| 欧美日韩第一视频| 亚洲一区av在线播放| 午夜精品一区二区三区在线视| 亚洲天堂av电影| 色偷偷88888欧美精品久久久| 欧美精品情趣视频| 在线观看中文字幕亚洲| 国产欧美日韩中文| 不卡中文字幕av| 97色在线视频| 欧美成人精品h版在线观看| yw.139尤物在线精品视频| 精品国产精品三级精品av网址| 久久精品电影网| 成人国产精品久久久久久亚洲| 国产一区二区三区在线| 中文在线资源观看视频网站免费不卡| 国产精品88a∨| 视频直播国产精品| 国产精品丝袜高跟| zzjj国产精品一区二区| 欧美精品激情在线| 国产国产精品人在线视| 国产精品久久久久久久久久ktv| 国产91精品黑色丝袜高跟鞋| 欧美一级片在线播放| 国产精品爱久久久久久久| 欧美性视频精品| 亚洲精品自产拍| 国产女人18毛片水18精品| 成人性生交大片免费看小说| 国产小视频国产精品| 91影视免费在线观看| 97超级碰在线看视频免费在线看| 中文字幕不卡在线视频极品| 97人人爽人人喊人人模波多| 欧美日韩亚洲精品内裤| 国产视频自拍一区| 欧美精品在线观看| 亚洲情综合五月天| 国产日韩在线视频| 国产亚洲视频中文字幕视频| 精品成人乱色一区二区| 欧美激情亚洲综合一区| 亚洲欧美激情在线视频| 日韩精品在线免费播放| 成人精品久久av网站| 97色在线播放视频| 国产主播精品在线| 欧美一级大片在线免费观看| 一本色道久久88亚洲综合88| 欧美中文字幕精品| 国产主播精品在线| 欧美巨大黑人极品精男| 亚洲淫片在线视频| 色妞久久福利网| 亚洲乱码国产乱码精品精| 亚洲电影成人av99爱色| 成人福利在线观看| 中文字幕亚洲一区二区三区五十路| 国产精品91在线观看| 日韩av在线影视| 欧美在线视频一区二区| 国产日韩欧美91| 91日本在线视频| 欧美一区二区三区图| 亚洲女人天堂色在线7777| 久久天堂电影网| 精品久久久国产精品999| 91成人国产在线观看| 黄色一区二区三区| 成人网页在线免费观看| 久久精品国产视频| 欧美激情亚洲一区| 国产精品免费久久久久久| 国色天香2019中文字幕在线观看| 色综合久久天天综线观看| 欧美精品久久久久久久久久| 日韩性生活视频| 91影视免费在线观看| 成人av资源在线播放| 亚洲综合一区二区不卡| 色综合久久悠悠| 日韩电影中文 亚洲精品乱码| 韩日精品中文字幕| 国产精品99久久久久久白浆小说| 国产精品成人va在线观看| 亚洲风情亚aⅴ在线发布| 国产精品永久免费视频| 亚洲欧美中文在线视频| 国产精品午夜一区二区欲梦| 欧美日韩在线观看视频| 伊人伊成久久人综合网站| 国产一区二区三区在线| 欧美成人午夜免费视在线看片| 7m精品福利视频导航| 亚洲片国产一区一级在线观看| 国产精品青青在线观看爽香蕉| 国产精品一区二区三区久久| 亚洲男人天天操| 亚洲欧美日韩国产中文专区| 永久免费毛片在线播放不卡| 日韩欧美一区视频| 亚洲国产美女久久久久| 日本免费一区二区三区视频观看| 国产精品国模在线| 精品国产一区二区三区久久狼5月| 51视频国产精品一区二区| 美女av一区二区三区| 欧洲日韩成人av| 国产欧美婷婷中文| 在线视频日韩精品| 国产精品扒开腿做爽爽爽男男| 日韩久久精品电影| 国产欧美日韩免费看aⅴ视频| 亚洲欧美成人网| 欧美洲成人男女午夜视频| 亚洲国产成人久久综合一区| 成人做爽爽免费视频| 欧美孕妇毛茸茸xxxx| 91九色国产社区在线观看| 亚洲视频一区二区三区| 亚洲精品网址在线观看| 久久精品视频免费播放| 色青青草原桃花久久综合| 久久久人成影片一区二区三区| 欧美二区在线播放| 欧美中文字幕在线视频| 91精品国产电影| 中文字幕免费精品一区高清| 懂色av影视一区二区三区| 国产精品日韩欧美大师| 国产性色av一区二区| 日韩在线视频观看正片免费网站| 高清一区二区三区四区五区|