程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 建立一個使用.Net 2.0 MemberShip功能的標准例程(二)——配置篇

建立一個使用.Net 2.0 MemberShip功能的標准例程(二)——配置篇

編輯:關於.NET

從.net 2.0開始 asp.net 就進入了一個倡導少寫代碼多配置的時期

“機器先進阿 我們只要把豬趕進去 對面就會從傳送帶裡傳出香腸來!”

下面就是啟動機器並且趕豬的工作。

在趕豬以前,我們先來了解一下,Web.Security 的工作大概方式

當一個頁面打開 系統會首先讀取System.web 按照其中的配置段 在進程中建立相應的各種Provider的實例。

之後的所有登陸控件在交互的時候會自動調用相應Provider實例的方法和屬性。所以大部分工作是在配置中進行的

組件部分的對象 有很多同行建議自己寫 免得過於依賴aspnetDB 具體可以參考幻想曲的文章

但我們這個是標准例程,所以暫時以 m$的標准庫為基礎建立

具體配置如下

1 配置數據庫

運行 \WINDOWS\Microsoft.NET\Framework\v2.0.50727 下的Aspnet_regsql.exe

隨後 向導便在SQL Server中建立了對應的表。

這些表就是.Net 2.0 默認Provider對應的表,如果你在建立一個新項目 就沒必要在自己寫煩人的登陸了,這些表和它們所支持默認Provider的已經涵蓋了很多高級功能,包括cookie的支持、跨網站跨進程的登陸、找回密碼、郵箱認證等功能,當然我們也可以擴展它們。

相對的 我們還需要在web.config 建立這個數據連接字符串(<configuration >段中)

  <connectionStrings>
    <add name="MemberShip_Connection" connectionString="Data Source=.;Initial Catalog=MemberShip_Demo;Persist Security Info=True;User ID=sa;Password=abcdefg" providerName="System.Data.SqlClient"/>
  </connectionStrings>

這樣數據庫的配置就已經完成了,我愛廚房怎麼說來著?陰干待用。

2 配置驗證類型

一個asp.net缺省的身份驗證是windows nt 登陸。如果我們要自己來處理驗證信息就要在 <configuration >下面的<system.web> 段加入節點通知系統。

    <authentication mode="Forms">
      <forms loginUrl="~\Membership\authing\Login.aspx" timeout="30000">
      </forms>
    </authentication>

mode=forms 表示我不要用默認的windows NT 權限設置、而用我們配置的這種自定義的 面向網頁界面的驗證方式。

loginUrl 表示如果訪問某頁需要驗證的話 跳轉到哪一個(一般是有Login控件的)地址來進行登陸。登陸完畢,會直接跳回剛才的頁面。

3 配置各種Provider

Provider對於Membership的感覺有點像 DataAdapter對於Dataset的感覺,都是可選擇的配件,你配置了不同的Provider 就有不同的用戶數據庫可以訪問

目前Provider 默認提供兩種官方Provider: SQL Provider & ADSI Provider

前者通過SqlServer數據庫保存 後者直接連結windows域的adsi服務

例如

<membership defaultProvider="Main_SqlMemberShipProvider" userIsOnlineTimeWindow="20">
      <providers>
        <add connectionStringName="MemberShip_Connection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordFormat="Hashed" applicationName="DEMO_Membership" name="Main_SqlMemberShipProvider" type="System.Web.Security.SqlMembershipProvider"/>
      </providers>
    </membership>

這個例子表示 我要用MemberShip_Connection這個連接字符串連接數據庫(我們陰干待用的部分)

用戶不能找回密碼但是可以重新設置密碼,找回的時候需要密碼提示問題,儲存在數據庫中的密碼用sha1進行加密 等等細節問題。 對於公用的Membership數據庫 區別名為 DEMO_Membership .

Type是重要的選項這決定你使用哪一個符合接口的具體的類型來擔任Provider 項 如果你使用自己的Provider 可以把DLL作為引用添加在bin目錄後 在這裡填寫詳細的命名空間信息 比如“"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089” 之類的東西 這裡不作贅述

這時候 我們已經可以通過控件進行申請和登陸了  你所需要做的只是把控件拖到指定的頁面上 然後test  也可以通過網站菜單下的管理工具進行修改

有些選項可能進不去 但是用戶的刪除和修改都可以嘗試使用了。 我們只需要進一步配置 更多的功能就向我們敞開大門了~~~

同樣我們配置Roles 和 Profile 的Provider

    <roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieRequireSSL="true" defaultProvider="SqlRoleProvider">
      <providers>
        <add connectionStringName="MemberShip_Connection" applicationName="DEMO_Membership" name="SqlRoleProvider" type="System.Web.Security.SqlRoleProvider"/>
      </providers>
    </roleManager>
<profile enabled="true" defaultProvider="SqlProfileProvider">
      <providers>
        <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MemberShip_Connection" applicationName="DEMO_Membership" description="SqlProfileProvider for SampleApplication"/>
      </providers>
      <properties>
    <add name="UserAge" type="System.String" defaultValue ="21"></add>
    <add name="UserSex" type="System.String" defaultValue ="Male"></add>
        </properties>
    </profile>

經過編譯以後 你已經可以輕松的在你的頁面裡面訪問和設置你現在登陸的用戶的各種信息:

  Protected Sub Button1_Click()Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim x As String = String.Empty
    x = x & Membership.GetUser().UserName & ":"
    x = x & Roles.GetRolesForUser(Membership.GetUser().UserName).Length & "個角色:"
    x = x & "年齡" & Profile.UserAge
    Button1.Text = x
  End Sub

假如你沒有登陸 可能會得到一個對象引用錯誤  但是你作為一個已知用戶登陸的話  運行結果大概是這樣

而剛才提到的網站管理工具 已經基本可以正常工作了。

配置篇的例子到此完成  至於每一個參數什麼意義  MSDN上還是很全的。 如果查資料比較不方便 可以留言 我們一起討論

下一章我們將使用ODS綁定這些數據到GridView 和FormView 上進行管理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved