Transcript 會員管理與個人化程序
第13章 會員管理與個人 化程序 第13章 會員管理與個人化程序 會員管理的基礎 13-2 啟用ASP.NET的會員管理 13-3 登入控制項 13-4 ASP.NET的個人化程序 13-5 Profile物件的個人化 13-1 13-1 會員管理的基礎 13-1-1 ASP.NET會員管理的基礎 13-1-2 ASP.NET表單基礎驗證 13-1-3 ASP.NET的會員管理功能 13-1-1 ASP.NET會員管理的基礎-登 入程序 不論網路商店、社群網站、聊天室或拍賣 網站,使用者通常都需要註冊成為會員後, 才能使用網站提供的服務,這類網站在進 入前都需要執行登入程序,以確認使用者 是合法的網站會員。 目前大部分的網站登入程序,都是在Web Form表單輸入使用者資料後,送到伺服器 端執行確認,確認程序是檢查會員資料庫 是否有此位會員,如果有,就表示是合法 會員,才能取得授權來進入特定網頁。 13-1-1 ASP.NET會員管理的基礎-使 用者的種類 一般來說,網站的使用者可以分成三大類, 其說明如下所示: 匿名訪客(Anonymous Visitors):不需登入 就可以進入網站的使用者,它不是會員,所以 並不能使用會員專屬的網站服務,即進入會員 才允許進入的網頁。 會員(Members):需要登入且經過驗證程序 確認身份的使用者,擁有權限可以使用會員的 專屬服務,進入會員專屬網頁。 管理者(Administrators):網站的超級使用者, 它是網站的管理者,擁有權限來新增或刪除網 站會員,和授予會員的權限。 13-1-1 ASP.NET會員管理的基礎-會 員管理的功能 ASP.NET會員管理的功能主要有兩個部分, 如下所示: 確認使用者身份:判斷使用者是否為會員後, 才授權使用者進入網站,ASP.NET預設提供表 單基礎驗證來確認使用者的身份。 儲存會員資料:因為會員需要確認身份才能進 入網站,所以會員需要先註冊,然後將註冊資 料儲存起來,以便檢查是否為合法會員。 ASP.NET預設使用SQL Server Express資料庫 來儲存會員資料。 13-1-2 ASP.NET表單基礎驗證驗證和授權 驗證(Authentication):驗證是確認請求 的程序,可以用來檢查使用者身份,通常 是以使用者名稱和密碼來確認使用者的身 份。 授權(Authorization):授權是當使用者身 份已經驗證後,可以授予擁有進入哪些網 頁和資源的權限。 13-1-2 ASP.NET表單基礎驗證說明 ASP.NET的表單基礎驗證(Forms-based Authentication)是在1.0/1.1版就提供的驗 證方式,它是使用Web Form表單來取得使 用者名稱和密碼後,以Membership類別方 法來檢查使用者身份,確認使用者是否允 許進入網站,即執行使用者的登入程序。 會員資料庫可以使用web.config檔案、XML 文件或資料庫來儲存會員資料,預設是使 用SQL Server Express資料庫來儲存驗證 所需的會員資料。 13-1-3 ASP.NET的會員管理功能 ASP.NET提供登入控制項建立相關註冊和 登入表單,可以使用Membership API來驗 證使用者,或角色(Roles)建立群組權限 的會員管理,其提供的會員管理功能,如 下所示: 使用者登入和會員管理控制項。 Membership API。 角色管理(Role Manager)。 Web介面的會員管理工具。 13-2 啟用ASP.NET的會員管理 建立會員專屬網頁的資料夾 13-2-2 啟用會員管理和建立會員資料庫 13-2-3 新增使用者 13-2-4 啟用與新增角色 13-2-5 指定角色的權限 13-2-6 指定使用者所屬的角色 13-2-1 13-2-1 建立會員專屬網頁的資料夾說明 對於會員管理的ASP.NET網站來說,雖然我們可 以指定個別ASP.NET網頁的權限,不過,在實作 上,通常都是以資料夾為單位來進行ASP.NET網 頁的管理,也就是替會員專屬的ASP.NET網頁建 立資料夾,只允許會員瀏覽的網頁就置於此資料 夾。 例如:網站使用者通常分為三大類,匿名訪客可 以瀏覽網站根目錄的ASP.NET網頁,會員專屬網 頁是在Member子資料夾,管理者是Admin子資料 夾。 13-2-1 建立會員專屬網頁的資料夾建立資料夾 開啟「方案總管」視窗,在網站根目錄上,執行 右鍵快顯功能表的【新增資料夾】指令,可以看 到預設建立名為NewFolder?的子資料夾,如下圖 所示: 13-2-2 啟用會員管理和建立會員資 料庫-步驟一 在VWD可以啟動Web網站管理工具,直接使用此工具來 啟用會員管理和建立會員資料庫,如下圖所示:(網站 /asp.net組態) 13-2-2 啟用會員管理和建立會員資 料庫-步驟二 13-2-2 啟用會員管理和建立會員資 料庫-完成啟用 在完成啟用會員管理後就會返回Web網站 管理工具,在下方「使用者」框看到網站 已經啟用會員管理,但是目前並沒有任何 使用者,如下圖所示: 13-2-2 啟用會員管理和建立會員資 料庫-web.config組態檔 在網站根目錄新增web.config組態檔,可以 看到在<authentication>標籤啟用ASP.NET 表單基礎驗證,如下所示: <system.web> <authentication mode="Forms" /> </system.web> 上述<authentication>標籤使用mode屬性指 定驗證方式,屬性值Forms就是表單基礎驗 證。 13-2-3 新增使用者 在啟用會員管理和建立會員資料庫後,我們就可 以使用Web網站管理工具來新增使用者,如下圖 所示: 13-2-4 啟用與新增角色-啟用角 色 對於大量會員的ASP.NET網站來說,我們可以群 組使用者成為角色,直接設定角色權限來快速建 立會員網站所需的權限設定。筆者準備在 ASP.NET網站啟用角色管理後,新增Admin和 Member二種角色,如下圖所示: 啟用角色 13-2-4 啟用與新增角色-新增角色 在ASP.NET網站啟用角色管理後,新增 Admin和Member二種角色,如下圖所示: 輸入角色名稱 13-4-4 啟用與新增角色-web.config 組態檔 ASP.NET啟用角色就是在web.config組態檔 加上<roleManager>標籤,enabled屬性 true表示啟用角色管理,如下所示: <roleManager enabled="true" /> 13-2-5 指定角色的權限新增存取規則 ASP.NET網站的角色權限主要是設定目錄的存取 權限,例如:指定只有Member角色允許存取 「Member」子目錄;Admin角色允許存取 「Admin」子目錄,其步驟如下所示: 左邊框選【Member】 目錄,右邊選角色 【Member】和權限 【允許】 選【Member】目錄,新 增【所有使用者】和 【拒絕】權限的規則 13-2-5 指定角色的權限-web.config 組態檔 在「Member」目錄下就會新增web.config 組態檔,並且在<authorization>標籤新增存 取規則的<allow>和<deny>標籤,如下所示: <system.web> <authorization> <allow roles="Member" /> <deny users="*" /> </authorization> </system.web> 13-2-6 指定使用者所屬的角色 在設定角色權限後,我們就可以指定使用者所屬 的角色。例如:使用者joe和tom屬於Member角 色;jane是Admin角色,如下圖所示: 13-3 登入控制項 13-3-1 Login控制項 13-3-2 LoginView、LoginStatus和LoginName控 制項 13-3-3 PasswordRecovery控制項 13-3-4 ChangePassword控制項 13-3-5 CreateUserWizard控制項 13-3-1 Login控制項-說明 Login控制項可以建立登入網站的表單,提供使用 者名稱和密碼的標準登入表單。Login控制項的常 用屬性說明,如下表所示: 屬性 TitleText CreateUserText CreateUserUrl PasswordRecoveryText PasswordRecoveryUrl DestinationPageUrl 說明 標題文字 新增使用者帳號的超連結文字 指定 URL 網址來新增使用者,通常是擁有 CreateUserWizard 控制項的 ASP.NET 網頁 處理忘記密碼的超連結文字 指定 URL 網址處理忘記密碼,通常是擁有 PasswordRecovery 控制項的 ASP.NET 網頁 指定成功登入後連接的 URL 網址 13-3-1 Login控制項-範例網站 ASP.NET網站:Ch13-3 在ASP.NET網頁Login.aspx新增Login控制項後, 更改相關屬性來建立會員登入網頁,如下圖所示: Login控制項 13-3-2 LoginView、LoginStatus和 LoginName控制項-LoginStatus LoginStatus控制項是用來顯示登入狀態,如為匿 名使用者就顯示登入網站的超連結;如果已經登 入就顯示登出網站超連結。LoginStatus控制項的 常用屬性,如下表所示: 屬性 LoginText LogoutText LogoutAction LogoutPageUrl 說明 登入網站超連結的標題文字 登出網站超連結的標題文字 對於登出網站超連結,可以設定其按下行為是 Refresh、 Redirect 或 RedirectToLoginPage LogutAction 屬性是 Redirect 時,設定轉址的 URL 網址 13-3-2 LoginView、LoginStatus和 LoginName控制項-LoginName LoginName控制項就是在成功登入網頁後, 在網頁顯示登入會員的使用者名稱。 LoginView控制 項 LoginName控 制項 13-3-2 LoginView、LoginStatus和 LoginName控制項-LoginView LoginView控制項可以建立不同登入檢視的網頁內 容,它是依據使用者是登入會員、匿名使用者和 不同的角色,來顯示不同的網頁內容。換句話說, LoginView控制項可以建立網站首頁,依登入使用 者的身份來顯示專屬的網頁內容。 在LoginView控制項的每一個RoleGroup控制項, 可以使用Roles屬性定義一種角色的網頁內容, AnonymousTemplate樣板是建立匿名使用者看到 的網頁內容;LoggedInTemplate樣板是登入網站 會員顯示的內容。 13-3-2 LoginView、LoginStatus和 LoginName控制項-新增RoleGroup控制項 開啟「LoginView工作」功能表,選【編輯 RoleGroups】超連結,可以看到「RoleGroup集 合編輯器」對話方塊。 新增角色 13-3-2 LoginView、LoginStatus和 LoginName控制項-AnonymousTemplate 選【LoginView】控制項開啟「LoginView 工作」功能表,在【檢視】欄選 【AnonymousTemplate】,然後輸入匿名 使用者顯示的網頁內容。 13-3-2 LoginView、LoginStatus和 LoginName控制項-LoggedInTemplate 在「LoginView工作」功能表的【檢視】欄, 選【LoggedInTemplate】,然後輸入登入 使用者顯示的網頁內容,在換行後新增 LoginName控制項,即[使用者名稱]。 13-3-2 LoginView、LoginStatus和 LoginName控制項-角色樣板 在【檢視】欄選【RoleGroup[0] - Admin】,然後 輸入Admin角色顯示的網頁內容,在換行後新增 LoginName控制項。 在【檢視】欄選【RoleGroup[0] - Member】,然 後輸入Member角色顯示的網頁內容,在換行後 新增LoginName控制項。 13-3-2 LoginView、LoginStatus和 LoginName控制項-範例網站 ASP.NET網站:Ch13-3 在ASP.NET網頁Default.aspx新增LoginStatus、 LoginName和LoginView控制項,並且更改相關 屬性值來建立網站首頁,可以依據使用者是登入 會員、匿名使用者和不同角色,來分別顯示不同 的網頁內容,如下圖所示: 13-3-3 PasswordRecovery控制項說明 PasswordRecovery控制項可以自動連接 ASP.NET會員管理機制,當使用者忘記密碼時, 以密碼問題和答案來重新取得新密碼。不過,系 統只能授了新密碼,並不能取回使用者設定的舊 密碼。 因為PasswordRecovery控制項取得的新密碼是使 用電子郵件寄送,所以在建立PasswordRecovery 控制項前,我們需要先設定SMTP伺服器。 PasswordRecovery 控制項 13-3-3 PasswordRecovery控制項設定SMTP伺服器 在「SMTP設定」 框選【設定SMTP 電子郵件設定】超 連結,可以看到設 定SMTP的Web Form表單,如右 圖所示: 13-3-3 PasswordRecovery控制項範例網站 ASP.NET網站:Ch13-3 在ASP.NET網站設定好SMTP伺服器後,就可以 開啟PasswordRecovery.aspx網頁來新增 PasswordRecovery控制項,並且指定自動化格式, 如下圖所示: 13-3-4 CreateUserWizard控制項-說 明 在ASP.NET網頁新增CreateUserWizard控 制項,就可以提供網站新增會員的功能。 CreateUserWizard 控制項 13-3-4 CreateUserWizard控制項-屬 性 CreateUserWizard控制項的常用屬性說明, 如下表所示: 屬性 DisplayCancelButton CancelDestinationPageUrl ContinueDestinationPageUrl 說明 是否顯示取消鈕 設定取消後連接的 URL 網址 指定成功新增會員後,連接的 URL 網址 13-3-4 CreateUserWizard控制項-範 例網站 ASP.NET網站:Ch13-3 在ASP.NET網頁CreateUserWizard.aspx新增 CreateUserWizard控制項,並且設定自動化格式 和相關屬性來完成控制項的建立,如下圖所示: 13-3-5 ChangePassword控制項-說 明 在ASP.NET網頁新增ChangePassword控 制項,就可以建立更改使用者密碼的功能, 控制項的DisplayUsername屬性可以設定是 否顯示使用者名稱的欄位。 ChangePassword 控制項 13-3-5 ChangePassword控制項-範 例網站 ASP.NET網站:Ch13-3 在ASP.NET網頁ChangePassword.aspx新增 ChangePassword控制項,並且設定自動化格式 和相關屬性來完成控制項的建立,如下圖所示: 13-4 ASP.NET的個人化程序-說明 對於網站內容的龐大資訊來說,我們除了 替網站資訊進行分類管理外,網站應該提 供個人化功能,可以讓會員存取有興趣資 訊,並且設定喜好外觀來建立個人風格的 資訊平台。 13-4 ASP.NET的個人化程序-個人化 的目的 個人化的最主要原因是基於營利考量,因 為網站內容有些可能是付費內容,只允許 付費會員存取,或是不同等級的會員擁有 不同的權限,可以檢視不同的網頁內容。 個人化的最終目的是提供個人化網路經驗, 網站能夠提供使用者網路使用經驗,例如: 在Amazon買書時,網站能夠提供喜好圖書 的建議清單,這是從會員網路消費經驗中, 分析出的網路經驗。 13-4 ASP.NET的個人化程序-個人化 功能 ASP.NET網站如果需要提供個人化功能,其主要 的工作如下所示: 識別使用者的身份:網站需要能夠識別出是匿名使用 者或網站會員,並且提供機制可以監控會員在瀏覽網 站過程中的需求,以便馬上提供回應。當然網站必須 擁有會員管理功能,可以新增和管理使用者。 儲存使用者相關資訊:網站除了儲存使用者資料外, 還需要儲存網路使用經驗的喜好和記錄資料,例如: 色彩、外觀、有興趣主題、瀏覽或購買的商品清單等。 提供個人化經驗:個人化經驗除了依照使用者身份來 提供不同的存取權限外,還包含自訂畫面、追蹤使用 者瀏覽經驗和消費資訊等。 13-5 Profile物件的個人化 定義Profile物件的屬性 13-5-2 Profile物件的簡單屬性 13-5-3 Profile物件的群組屬性 13-5-1 13-5-1 定義Profile物件的屬性-說明 Profile物件是ASP.NET 2.0版的新功能,可 以取代Session物件來追蹤使用者狀態。 Profile物件的屬性是在Web組態檔 Web.config定義,它是Web應用程式希望 儲存的使用者專屬資料。 在ASP.NET系統提供相關機制,預設是使 用SQL Server Express資料庫,可以自動 在跨網頁瀏覽時,讓ASP.NET程式存取 Profile物件儲存的資料。 13-5-1 定義Profile物件的屬性-在 web.config組態檔定義Profile物件屬性 <profile enabled="true"> <properties> <add name="Name" defaultValue="Huey-An Chen" type="String"/> <group name="Student"> <add name="StudentId" type="Int32"/> <add name="Name" type="String"/> <add name="Score" type="Int32"/> </group> </properties> </profile> 13-5-1 定義Profile物件的屬性Profile物件與ASP.NET會員管理 Profile物件與ASP.NET會員管理擁有密切 關係,因為Profile物件儲存的資料,預設是 針對指定會員儲存的資料,如此,當使用 者登入網站後,系統才能依據登入會員從 資料庫取出對應的Profile物件。 為了方便測試本節Profile物件的ASP.NET 網頁,網頁是位在「Member」子目錄,此 目錄限制擁有Member角色權限的會員才能 執行此目錄的ASP.NET網頁,例如:使用 者tom。 13-5-1 定義Profile物件的屬性Profile物件與Session物件的差異 在第7章的Session物件可以儲存會員的使 用者資訊,不過,Session物件儲存的資料 只在目前交談期有效,當交談期結束,下 一次進入Web應用程式時,仍然需要重新 輸入這些資料,資料並不會自動保留。 Profile物件能夠自動將使用者資料儲存在永 久儲存媒體,預設是SQL Server Express 資料庫,當下一次進入Web應用程式時, 上一次進入建立或修改的Profile資料能夠自 動取出,並且自動維護這些資料。 13-5-2 Profile物件的簡單屬性-定義 Profile物件的簡單屬性是指儲存單一資 訊的屬性,在web.config檔案定義 Name簡單屬性,如下所示: <properties> <add name="Name" defaultValue="Huey-An Chen" type="String"/> </properties> 13-5-2 Profile物件的簡單屬性-存取 在ASP.NET網頁可以使用程式碼來存取 Profile物件的屬性值,如下所示: lblOutput.Text = Profile.Name; Profile.Name = txtName.Text; 上述程式碼分別取出和設定Profile物件的 Name屬性,因為Profile物件屬性會持續存 在,換句話說,我們可以在跨網頁瀏覽時, 讓ASP.NET網頁存取Profile物件儲存的資 料。 13-5-2 Profile物件的簡單屬性-範例 網站 ASP.NET網站:Ch13-5-2 在ASP.NET網頁Member/Default.aspx使用 TextBox控制項輸入使用者姓名後,指定Profile物 件的Name屬性值且轉址至Ch13-5-2.aspx,然後 在Ch13-5-2.aspx取出和顯示Profile物件的屬性值, 如下圖所示: 13-5-3 Profile物件的群組屬性-定義 Profile物件的群組屬性儲存的是一組資訊, 在web.config檔案已經定義Student群組屬 性來儲存學生資訊,如下所示: <properties> <group name="Student"> <add name="StudentId" type="Int32"/> <add name="Name" type="String"/> <add name="Score" type="Int32"/> </group> </properties> 13-5-3 Profile物件的群組屬性-存取 在ASP.NET網頁可以使用程式碼來存取 Profile物件的屬性值,如下所示: txtID.Text = Profile.Student.StudentId.ToString(); txtName.Text = Profile.Student.Name; txtScore.Text = Profile.Student.Score.ToString(); 上述程式碼取出Profile群組屬性Student的 學生資訊StudentId、Name和Score。 13-5-3 Profile物件的群組屬性-存取 ASP.NET網站:Ch13-5-3 在ASP.NET網頁Member/Default.aspx輸入學生 資料後,就會設定Profile物件群組屬性且轉址到 Ch13-5-3.aspx,然後在Ch13-5-3.aspx取出和顯 示Profile物件的群組屬性值,如下圖所示: