42
Giáo trình ASP.NET nâng cao ph n 1: Các đi u khi n nâng cao trong asp.net Ch ng 1: S d ng đi u khi n Login ươ 1.1 T ng quan v các đi u khi n Login 1.2 S d ng đi u khi n Login 1.3 S d ng đi u khi n LoginStatus 1.4 S d ng đi u khi n ChangePassword 1.5 S d ng đi u khi n PasswordRecovery Ch ng 2: ASP.NET Menbership ươ 2.1 C u hình Authentication 2.2 C u hình Authorization 2.3 S d ng ASP.NET Menbership 2.4 S dung Role Manager Ch ng 3: Global Resource và Local Resource ươ 3.1 Thi t l p Current Culture ế 3.2 S d ng l p CulterInfo 3.3 T o Local Resources 3.4 T o Global Resources 3.5 S d ng đi u khi n Localize Ch ng 4: S d ng các đi u khi n đi u h ng ươ ướ 4.1 T ng quan v Site Map 4.2 S d ng đi u khi n SiteMapPath 4.3 S d ng đi u khi n Menu 4.4 S d ng đi u khi n TreeView Ch ng 5: Xây d ng và s d ng các Đi u khi n do ng i dùng t o ra ươ ườ 5.1 T ng quan v xây d ng các đi u khi n 5.2 ViewState và ControlState 5.3 X lý s ki n và D li u tr v Ch ng 6: ASP.NET và AJAX ươ Ph n 2: Xây d ng ng d ng V i ASP.NET (M c tiêu: Xây d ng website th ng m i đi n t , bán máy tính tr c tuy n.) ươ ế Ch ng 8: Gi i thi u v h th ng th ng m i đi n t ươ ươ Ch ng 9: Mô hình kinh doanh ươ 9.1 Thu th p yêu c u 9.2 Phân tích hi u qu 9.3 Nghiên c u và qu n lý r i do Ch ng 10: Mô hình hóa và xây d ng giao di n ng d ng ươ 10.1 Mô hình hóa h th ng 10.2 Thi t k d li u v i sqlServer 2005 ế ế Ch ng 11: Thi t k ki n trúc ươ ế ế ế 11.1 Xây d ng ki n trúc h th ng ế 11.2 T o các đ i t ng dùng chung ượ 11.3 T o t ng truy c p d li u 11.4 T o t ng x lý nghi p v

Idoc.vn Giao Trinh Aspnet Nang Cao

  • Upload
    ngo-gia

  • View
    232

  • Download
    1

Embed Size (px)

DESCRIPTION

asp.net

Citation preview

Giáo trình ASP.NET nâng cao

ph n 1: Các đi u khi n nâng cao trong asp.netầ ề ểCh ng 1: S d ng đi u khi n Loginươ ử ụ ề ể1.1 T ng quan v các đi u khi n Loginổ ề ề ể1.2 S d ng đi u khi n Loginử ụ ề ể1.3 S d ng đi u khi n LoginStatusử ụ ề ể1.4 S d ng đi u khi n ChangePasswordử ụ ề ể1.5 S d ng đi u khi n PasswordRecoveryử ụ ề ểCh ng 2: ASP.NET Menbershipươ2.1 C u hình Authenticationấ2.2 C u hình Authorizationấ2.3 S d ng ASP.NET Menbershipử ụ2.4 S dung Role Manager ửCh ng 3: Global Resource và Local Resourceươ3.1 Thi t l p Current Cultureế ậ3.2 S d ng l p CulterInfoử ụ ớ3.3 T o Local Resourcesạ3.4 T o Global Resourcesạ3.5 S d ng đi u khi n Localizeử ụ ề ểCh ng 4: S d ng các đi u khi n đi u h ngươ ử ụ ề ể ề ướ4.1 T ng quan v Site Mapổ ề4.2 S d ng đi u khi n SiteMapPathử ụ ề ể4.3 S d ng đi u khi n Menuử ụ ề ể4.4 S d ng đi u khi n TreeViewử ụ ề ểCh ng 5: Xây d ng và s d ng các Đi u khi n do ng i dùng t o raươ ự ử ụ ề ể ườ ạ5.1 T ng quan v xây d ng các đi u khi nổ ề ụ ề ể5.2 ViewState và ControlState5.3 X lý s ki n và D li u tr vử ự ệ ữ ệ ả ềCh ng 6: ASP.NET và AJAXươ

Ph n 2: Xây d ng ng d ng V i ASP.NETầ ự ứ ụ ớ(M c tiêu: Xây d ng website th ng m i đi n t , bán máy tính tr c tuy n.)ụ ự ươ ạ ệ ử ự ếCh ng 8: Gi i thi u v h th ng th ng m i đi n tươ ớ ệ ề ệ ố ươ ạ ệ ửCh ng 9: Mô hình kinh doanhươ9.1 Thu th p yêu c uậ ầ9.2 Phân tích hi u quệ ả9.3 Nghiên c u và qu n lý r i doứ ả ủCh ng 10: Mô hình hóa và xây d ng giao di n ng d ngươ ự ệ ứ ụ10.1 Mô hình hóa h th ngệ ố10.2 Thi t k d li u v i sqlServer 2005ế ế ữ ệ ớCh ng 11: Thi t k ki n trúcươ ế ế ế11.1 Xây d ng ki n trúc h th ngự ế ệ ố11.2 T o các đ i t ng dùng chungạ ố ượ11.3 T o t ng truy c p d li uạ ầ ậ ữ ệ11.4 T o t ng x lý nghi p vạ ầ ử ệ ụ

11.5 L a ch n tích h p cho ng d ngự ọ ợ ứ ụ11.6 T o t ng trình bàyạ ầCh ng 12: Xây d ng ng d ngươ ự ứ ụ12.1 Phát tri n danh m c s n ph mể ụ ả ẩ12.2 Xây d ng Gi hàngự ỏ12.3 Tích h p thanh toán tr c tuy nợ ự ế12.4 Cài đ t X lý ki m traặ ử ể12.5 Xây d ng các đi u khi n qu n tr .ự ề ể ả ị12.6 Xây d ng tài kho n khách hàngự ảCh ng 13: tri n khai và b o trì ng d ngươ ể ả ứ ụ

N i Dungộ

Ch ng 1. S d ng các đi u khi n loginươ ử ụ ề ểB n có th s d ng các đi u khi n Login c a ASP.NET đ xây d ng các h th ng đăngạ ể ử ụ ề ể ủ ể ự ệ ố ký ng i s d ng cho wensite c a mình, B n có th s d ng các Login Control đ t oườ ử ụ ủ ạ ể ử ụ ể ạ form đăng nh p, đăng ký, thay đ i m t kh u hay ghi nh m t kh u trên Form.ậ ổ ậ ẩ ớ ậ ẩTrong ch ng này chúng ta s h c chi ti t các đi u khi nươ ẽ ọ ế ề ể• Login: Cho phép hi n th Form đăng nh p ng i s d ng.ể ị ậ ườ ử ụ• CreateUserWizard: Cho phép hi n th Form đăng ký ng i s d ngể ị ườ ử ụ• LoginStatus: Hi n th tr ng thái Login hay Logout ph thu c vào tr ng thái ki mể ị ạ ụ ộ ạ ể ch ng ng i s d ngứ ườ ử ụ• LoginName: Hi n th tên ng i đăng ký hi n t iể ị ườ ệ ạ• ChangePassword: Hi n th Form cho phép ng i s d ng thay đ i m t kh uể ị ườ ử ụ ổ ậ ẩ• PasswordRecovery: Cho phép ng i s d ng khôi ph c password, password này sườ ử ụ ụ ẽ đ c g i vào mail cho ng i s d ng.ượ ử ườ ử ụ• LoginView: hi n th các n i dung khác nhau t i m i ng i s d ng ph c thu c thu cể ị ộ ớ ỗ ườ ử ụ ụ ộ ộ vào authentication ho c role.ặ1.1 T ng quan v các đi u khi n loginổ ề ề ểGi s b n có m t trang web nh sau:ả ử ạ ộ ưListing 1.1 Baomat/Secret.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Secret.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"><title>Bao mat</title></head><body><form id="form1" runat="server"><div>Đây là trang web đ c b o m tượ ả ậ</div>

</form></body></html>

Khi ch y, trang s hi n th dòng ch “Đây là trang web đ c b o m t”ạ ẽ ể ị ữ ượ ả ậĐ b o m t cho trang web này b n c n thi t l p hai c u hình trên ng d ng c a b n,ể ả ậ ạ ầ ế ậ ấ ứ ụ ủ ạ c n c u hình c authentication và authorization.ầ ấ ảĐ u tiên b n c n thi t l p authentication v mode=”Forms” trong file web.config trongầ ạ ầ ế ậ ề th m c g c.ư ụ ốListing 1.2 web.config<system.web><authentication mode="Forms" /></system.web>B i m c đ nh t t c m i ng i đ có th truy c p vào website, n u b n ngăn c n ng iở ặ ị ấ ả ọ ườ ề ể ậ ế ạ ả ườ s d ng truy c p vào th m c nào b n c u hình authortization cho th m c đó, trongử ụ ậ ư ụ ạ ấ ư ụ Listing 1.3 sau s ngăn c n ng i s d ng truy c p vào th m c “Baomat”.ẽ ả ươ ử ụ ậ ư ụListing 1.3 Baomat/web.config<configuration><system.web><authorization><deny users="?"/></authorization></system.web></configuration>

Khi b n thi t l p hai c u hình trên thì khi website c a b n yêu c u t i trang Secret.aspxạ ế ậ ấ ủ ạ ầ ớ thì ng website s t đ ng chuy n v trang login.aspxứ ẽ ự ộ ể ềListing 1.4 Login.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"><title>Trang dang nhap</title></head><body><form id="form1" runat="server"><div><asp:Login ID="loginVidu" CreateUserUrl="~/Register.aspx" CreateUserText="Đăng ký" runat="server"></asp:Login></div></form>

</body></html>

Giao di n trang Login.aspxệ

(Hình 1)

Trong Listing 1.4 b n đ ý đi u khi n Login có hai thu c tính CreateUserText,ạ ể ề ể ộ CreateUserUrl Nó s đ a ra m t link v i Text là “Đăng ký” và m t đ a ch URL d n t iẽ ư ộ ớ ộ ị ỉ ẫ ớ trang đăng ký trong tr ng h p này là trang Register.aspx.ườ ợ

T p tin đính kèm: ậ

1.2 S d ng đi u khi n Loginử ụ ề ểĐi u khi n Login đ a ra m t form đăng nh p tiêu chu n. M c đ nh đi u khi n Login sề ể ư ộ ậ ẩ ặ ị ề ể ử d ng ASP.NET MenberShip đ ki m ch ng ng i s d ng, tuy nhiên b n có th tùyụ ể ể ứ ườ ử ụ ạ ể ch nh ki u ki m ch ng ng i s d ng v i đi u khi n Login.ỉ ể ể ứ ườ ử ụ ớ ề ểĐi u khi n Login h tr r t nhi u thu c tính cho phép b n tùy ch nh cách hi n th vàề ể ỗ ợ ấ ề ộ ạ ỉ ể ị

ng x c a đi u khi n nh Listing 1.5 sau:ứ ử ủ ề ể ưListing 1.5 showLogin.aspx

Mã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="showLogin.aspx.cs" Inherits="showLogin" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Hi n th Form đăng nh p</title>ể ị ậ <style type="text/css"> .login { width:250px;

font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .login_title { background-color:darkblue; color:white; font-weight:bold; } .login_instructions { font-size:12px; text-align:left; padding:10px; } .login_button { border:solid 1px black; padding:3px; } </style></head><body> <form id="form1" runat="server"> <div> <asp:Login ID="Login1" InstructionText="B n c n nh p tên đăng nh p và m tạ ầ ậ ậ ậ kh u đ đăng nh p"ẩ ể ậ TitleText="Đăng nh p" TextLayout="TextOnTop" LoginButtonText="Đăng nh p"ậ ậ CssClass="login" TitleTextStyle-CssClass="login_title" InstructionTextStyle-CssClass="login_instructions" LoginButtonStyle-CssClass="login_button" runat="server"> </asp:Login> </div> </form></body></html>

K t xu t c a ch ng trình trênế ấ ủ ươ

Hình 2

1.2.1 T đ ng chuy n trang t i m t trang ch đ nhự ộ ể ớ ộ ỉ ị

N u b n yêu c u 1 trang mà b n ch a đ c ki m ch ng, ASP.NET s t đ ng chuy nế ạ ầ ạ ư ượ ể ứ ẽ ự ộ ể b n t i trang Login.aspx. Sau khi b n đăng nh p thành công, nó s chuy n b n ng cạ ớ ạ ậ ẽ ể ạ ượ l i t i trang yêu c u.ạ ớ ầKhi b n b chuy n sang trang Login.aspx, m t chu i truy v n tham s đ t tên làạ ị ể ộ ỗ ấ ố ặ ReturnUrl đ c t đ ng thêm vào trang yêu c u, Chu i truy v n này s ch a đ ngượ ự ộ ầ ỗ ấ ẽ ứ ự đ ng d n c a trang yêu c u, Đi u khi n Login s s d ng tham s ReturnUrl nàyườ ẫ ủ ầ ề ể ẽ ử ụ ố chuy n trang tr l i trang ngu n.ể ở ạ ồ

1.2.2 T đ ng n đi u khi n Login khi ki m ch ng ng i s d ngự ộ ẩ ề ể ể ứ ườ ử ụM t vài website hi n th đi u khi n trên đ nh t t c các trang, khi ng i s d ng đăngộ ể ị ề ể ỉ ấ ả ườ ử ụ nh p thành công thì đi u khi n này t đ ng n đi. Đ làm đi u này th t đ n gi n trênậ ề ể ự ộ ẩ ể ề ậ ơ ả ASP.NET, b n ch c n thêm vào m t đi u khi n Login trên MasterPage, và đi u khi nạ ỉ ầ ộ ề ể ề ể login này có th hi n th trên t t c các trang có s d ng MasterPage. B n có th sể ể ị ấ ả ử ụ ạ ể ử d ng thuôc tính Orientation đ hi n th đi u khi n Login này theo chi u ngang ho cụ ể ể ị ề ể ề ặ chi u d c nh ví d sau:ề ọ ư ụListing 1.6 Main.master

Mã:<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Main.master.cs" Inherits="Main" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Đi u khi n Login</title>ề ể <style type="text/css"> body { background-color:#e5e5e5; } .content { margin:auto; width:650px; border:solid 1px black; background-color:white; padding:10px; } .login { font:10px Arial,Sans-Serif; margin-left:auto; } .login input {

} </style></head><body> <form id="form1" runat="server"> <div id="content"> <asp:Login id="loginVidu" Orientation="Horizontal" VisibleWhenLoggedIn="false" DisplayRememberMe="false" TitleText="" CssClass="login" Runat="server" /><hr /> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </div> </form></body></html>

Trang loginMaster.aspx<%@ Page Language="C#" MasterPageFile="~/Main.master" AutoEventWireup="true" CodeFile="loginMaster.aspx.cs" Inherits="loginMaster" Title="Untitled Page" %><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <h1>Chào m ng b n đ n v i website c a chúng tôi</h1>ừ ạ ế ớ ủ</asp:Content>

K t xu t c a ch ng trìnhế ấ ủ ươ

Hình 3

1.2.3 S d ng Templeteử ụĐi u khi n Login bao g m thu c tính LayoutTemplate cho phép b n tùy ch nh cách thề ể ồ ộ ạ ỉ ể hi n c a đi u khi n Login.ệ ủ ề ểKhi b n thêm vào m t m u hi n th , b n c n thêm vào đi u khi n và Temple các IDạ ộ ẫ ể ị ạ ầ ề ể sau:• UserName• Password• RememberMe• FailureTextVà b n c n thêm vào m t thu c tính CommandName v i giá tr Loginạ ầ ộ ộ ớ ịListing 1.7 LoginTemplete.aspx

Mã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoginTemplate.aspx.cs" Inherits="LoginTemplate" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Trang đăng nh p</title>ậ</head><body> <form id="form1" runat="server"> <div> <asp:Login ID="Login1" runat="server"> <LayoutTemplate> <asp:Label ID="lblusername" runat="server" Text="Tên đăng nh p"></asp:Label><br />ậ <asp:TextBox ID="UserName" runat="server"></asp:TextBox><br /> <asp:Label ID="lblpass" runat="server" Text="M t kh u"></asp:Label><br />ậ ẩ <asp:TextBox ID="Password" runat="server"></asp:TextBox><br /><br /> <asp:Button ID="btnLogin" CommandName="Login" Text="Đăng nh p"ậ runat="server" /> </LayoutTemplate> </asp:Login> </div> </form></body></html>

K t xu t c a ch ng trìnhế ấ ủ ươ

Hình 4

1.2.4 Th c hi n tùy ch nh ki m ch ng v i đi u khi n Loginự ệ ỉ ể ứ ớ ề ểM c đ nh, đi u khi n Login s d ng ASP.NET MenberShip đ ki m ch ng tên s d ngặ ị ề ể ử ụ ể ể ứ ử ụ và m t kh u. N u b n c n thay đ i ng x a m c đ nh b n có th đi u khi n s ki nậ ẩ ế ạ ầ ổ ứ ủ ặ ị ạ ể ề ể ự ệ Authenticate c a đi u khi n Login nh ví d d i đây.ủ ề ể ư ụ ướListing 1.8 Web.configMã:<configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms"> <forms>

<credentials passwordFormat="Clear"> <user name="Thietke" password="itechpro"/> <user name="Daotao" password="itechpro"/> </credentials> </forms> </authentication> </system.web></configuration>

Trang LoginCustom.aspx

Mã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoginCustom.aspx.cs" Inherits="LoginCustom" %>

<script runat="server"> protected void loginCustom_Authenticate(object sender, AuthenticateEventArgs e) { string userName = loginCustom.UserName; string Password = loginCustom.Password; e.Authenticated = FormsAuthentication.Authenticate(userName, Password); }</script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Login Custom</title></head><body> <form id="form1" runat="server"> <div> <asp:Login ID="loginCustom" OnAuthenticate="loginCustom_Authenticate" runat="server"> </asp:Login> </div> </form></body></html>

1.3 S d ng đi u khi n CreateUserWizardử ụ ề ểĐi u khi n CreateUserWizard đ a ra m t Form đăng ký ng i s d ng, M t ng iề ể ư ộ ườ ử ụ ộ ườ đăng ký thành công, ng i đăng ký m i đó s đ c thêm vào website c a b n. Đi uườ ớ ẽ ượ ủ ạ ề khi n CreateUserWizard s d ng ASP.NET MenberShip đ t o m t ng i s d ngể ử ụ ể ạ ộ ườ ử ụ m i.ớ

Đi u khi n CreatUserWizsrd h tr r t nhi u thu c tính cho phép b n tùy ch nh cáchề ể ỗ ợ ấ ề ộ ạ ỉ hi n th và ng x nh ví d sau:ể ị ứ ử ư ụListing 1.9 showCreateUserWizard.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="showCreateUserWizard.aspx.cs" Inherits="showCreateUserWizard" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Hi n th Form đăng ký ng i s d ng</title>ể ị ườ ử ụ <style type="text/css"> .createUser { width:350px; font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .createUser_title { background-color:darkblue; color:white; font-weight:bold; } .createUser_instructions { font-size:12px; text-align:left; padding:10px; } .createUser_button { border:solid 1px black; padding:3px; } </style></head><body> <form id="form1" runat="server"> <div> <asp:CreateUserWizard id="CreateUserWizard1"

ContinueDestinationPageUrl="~/Default.aspx" InstructionText="Please complete the following form to register at this Website." CompleteSuccessText="Your new account has been created. Thank you for registering." CssClass="createUser" TitleTextStyle-CssClass="createUser_title" InstructionTextStyle-CssClass="createUser_instructions" CreateUserButtonStyle-CssClass="createUser_button" ContinueButtonStyle-CssClass="createUser_button" Runat="server" /> </div> </form></body></html>

K t xu t c a ch ng trìnhế ấ ủ ươ

Hình 5

1.3.1 G i Email thông báo t i ng i s d ngử ớ ườ ử ụB n có th thi t l p cho phép đi u khi n CreateUserWizard g i th t đ ng đ n ng iạ ể ế ậ ề ể ử ư ự ộ ế ườ s d ng khi đăng ký thành công m t tài kho n m i trên website c a mìnhử ụ ộ ả ớ ủVí d b n có th g i m t mail ch a đ ng thông tin v tài kho n và m t kh u c a ng iụ ạ ể ư ộ ứ ự ề ả ậ ẩ ủ ườ s d ng v tài kho n email c a ng i này.ử ụ ề ả ủ ườListing 1.10 CreateUserWizardEmail.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CreateUserWizardEmail.aspx.cs" Inherits="CreateUserWizardEmail" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Send Email</title></head><body> <form id="form1" runat="server"> <div> <asp:CreateUserWizard id="CreateUserWizard1" Runat="server"> <MailDefinition BodyFileName="Register.txt" Subject="Xác nh n đăng ký"ậ From="[email protected]" />

</asp:CreateUserWizard> </div> </form></body></html>

L p MailDefinition h tr các thu c tính sau:ớ ỗ ợ ộBodyFileName: ch đ nh đ ng d n ch a n i dung thỉ ị ườ ẫ ứ ộ ưCC: Cho phép g i m t b n copy t i hòm th khácử ộ ả ớ ưEmbeddedObjects: Cho phép g i kèm các file khác nh là nh, doc…ử ư ảFrom: Đ a ch hòm th g i.ị ỉ ư ửIsBodyHtml: Cho phép g i đ nh d ng Htmlử ị ạPriority: Cho phép b n ch đ nh đ u tiên c a th , nó có th có các giá tr sau: High,ạ ỉ ị ộ ư ủ ư ể ị Low, và NormalSubject: Ch đ nh tiêu đ c a th .ỉ ị ề ủ ư

L p MailDefinition s d ng mail server đ c c u hình b i thành ph n SMTP trong fileớ ử ụ ượ ấ ở ầ Web.config nh ví d sau:ư ụListing 1.11 Web.configMã:<configuration> <system.net> <mailSettings> <smtp deliveryMethod="PickupDirectoryFromIis"></smtp> </mailSettings> </system.net></configuration>

V i ví d trên là b n dùng mail server t máy c c b , b n cũng có th thi t l p mailớ ụ ạ ừ ụ ộ ạ ể ế ậ server t m t máy ch khác b ng vi c ch đ nh các mail host, username và Passwwordừ ộ ủ ằ ệ ỉ ịListing 1.12 Web.configMã:<configuration> <system.net> <mailSettings> <smtp> <network host="mail.yourdomain.com" userName="admin" password="secret"/> </smtp> </mailSettings> </system.net></configuration>

1.3.2 Chuy n ng i s d ng sang m t trang khác t đ ngể ườ ử ụ ộ ự ộKhi b n đăng nh p thành công trên trang Login.aspx, trang t đ ng chuy n l i trangạ ậ ự ộ ể ạ ng i s d ng v a yêu c u. V i đi u khi n CreateUserWizard không t đ ng làm vi cườ ử ụ ừ ầ ớ ề ể ự ộ ệ này cho chúng ta, đ nó có th làm vi c gi ng v i đi u khi n Login chúng ta c n vi tể ể ệ ố ớ ề ể ầ ế

thêm m t ít code.ộĐi u khi n login trong Listing 1.12 sau bao g m m t đ ng đ ng i s d ng chuy nề ể ồ ộ ườ ể ườ ử ụ ể đ n trang đăng ký s d ng đ c đ t tên là CreateUserWizardReturn.aspx. Trong s ki nế ử ụ ượ ặ ự ệ Page_Load(). Giá tr c a chu i truy v n đ c thêm vào trang đăng ký.ị ủ ỗ ấ ượListing 1.13 LoginReturn.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoginReturn.aspx.cs" Inherits="LoginReturn" %>

<script runat="server"> protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string dest = Request.QueryString["ReturnUrl"]; Login1.CreateUserUrl = "~/CreateUserWizardReturn.aspx?ReturnUrl=" + Server.UrlEncode(dest); } }</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Đăng nh p</title>ậ</head><body> <form id="form1" runat="server"> <div> <asp:Login id="Login1" CreateUserText="Register" CreateUserUrl="~/CreateUserWizardReturn.aspx" Runat="server" /> </div> </form></body></html>

Tr c khi s d ng Listing 1.13 b n c n thay đ i tên trang LoginReturn.aspx thành trangướ ử ụ ạ ầ ổ Login.aspx. N u ng i s d ng yêu c u đ n m t trang yêu c u ph i ki m ch ng, ng iế ườ ử ụ ầ ế ộ ầ ả ể ứ ườ s d ng s t đ ng chuy n t i trang Login.aspx. Tham s ReturnUrl s đ c g n vàoử ụ ẽ ự ộ ể ớ ố ẽ ượ ắ trang Login này.

Trong Listing 1.14 sau ch a đ ng m t đi u khi n CreateUserWizard. Trang này chứ ự ộ ề ể ỉ ch a đ ng m t đi u khi n s ki n Page_Load(). Giá tr c a tham s ReturnUrl đ c sứ ự ộ ề ể ự ệ ị ủ ố ượ ử d ng đ đ a ng i s d ng tr v trang mà ng i s d ng yêu c u.ụ ể ư ườ ử ụ ở ề ườ ử ụ ầListing 1.14 CreateUserWizardReturn.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CreateUserWizardReturn.aspx.cs" Inherits="CreateUserWizardReturn" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> void Page_Load() { if (!Page.IsPostBack) { string dest = "~/Default.aspx"; if (!String.IsNullOrEmpty(Request.QueryString["ReturnURL"])) dest = Request.QueryString["ReturnURL"]; CreateUserWizard1.ContinueDestinationPageUrl = dest; } }</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>G i l i trang CreateUserWizardReturn.aspx</title>ọ ạ</head><body> <form id="form1" runat="server"> <div> <asp:CreateUserWizard ID="CreateUserWizard1" runat="server" /> </div> </form></body></html>

1.3.3 Sinh Password t đ ngự ộM t vài website khi b n đăng ký s d ng, nó ch yêu c u b n nh p các thông tin cáộ ạ ử ụ ỉ ầ ạ ậ nhân còn m t kh u website s t sinh ra và g i v hòm th c a b n. sau khi đăng nh pậ ẩ ẽ ự ử ề ư ủ ạ ậ l n đ u b n có th thay đ i m t kh u này.ầ ầ ạ ể ổ ậ ẩN u b n c n s d ng k ch b n này cho website c a b n khi ng i s d ng đăng ký sế ạ ầ ử ụ ị ả ủ ạ ườ ử ụ ử d ng, b n c n l m đ c 3 thu c tính sau c a đi u khi n CreateUserWizardụ ạ ầ ắ ượ ộ ủ ề ểAutoGeneratePassword: Cho phép t sinh ra m t password t đ ngự ộ ự ộDisableCreatedUser: Cho phép vô hi u hóa t o tài kho n m i t đi u khi nệ ạ ả ớ ừ ề ể CreateUserWizard.LoginCreatedUser: Cho phép b n ngăn c n ng i s d ng m i s đ c đăng nh p tạ ả ườ ử ụ ớ ẽ ượ ậ ự đ ngộ

B n có th g i hai ki u mail xác nh n. Đ u tiên b n có th sinh password t đ ng vàạ ể ử ể ậ ầ ạ ể ự ộ g i Password vào hòm th c a ng i s d ng. Trong t ng h p này b n s cho phépử ư ủ ườ ử ụ ườ ợ ạ ẽ thu c tính AutoGeneratePassword và vô hi u hóa thu c tính LoginCreatedUser. Tr ngộ ệ ộ ươ h p th 2, b n có th cho phép m t ng i s d ng nh p m t kh u và g i mã xác nh nợ ứ ạ ể ộ ườ ử ụ ậ ậ ẩ ử ậ đ n hòm th xác nh n Trong tr ng h p này b n s cho phép thu c tínhế ư ậ ườ ợ ạ ẽ ộ DisableCreatedUser và vô hi u hóa thu c tính LoginCreatedUser.ệ ộListing 1.15 ch a đ ng m t đi u khi n CreateUserWizard mà không yêu c u nh p m tứ ự ộ ề ể ầ ậ ậ kh u. Đi u khi n này cho phép thu c tính AutoGeneratePassword và vô hi u hóa thuôcẩ ề ể ộ ệ tính LoginCreatedUserListing 1.15 CreateUserWizardPasswordConfirmation.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CreateUserWizardPasswordConfirmation.aspx.cs" Inherits="CreateUserWizardPasswordConfirmation" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>T đ ng sinh Password</title>ự ộ</head><body> <form id="form1" runat="server"> <div> <asp:CreateUserWizard id="CreateUserWizard1" CompleteSuccessText="A confirmation email containing your new password has been sent to your email address." AutoGeneratePassword="true" LoginCreatedUser="false" ContinueDestinationPageUrl="~/Login.aspx" Runat="server"> <MailDefinition From="[email protected]" BodyFileName="PasswordConfirmation.htm" IsBodyHtml="true" Subject="Registration Confirmation" /> </asp:CreateUserWizard> </div> </form></body></html>

Đi u khi n CreateUserWizard g i th ch a đ ng nh trong Listing 1.16ề ể ử ư ứ ự ưListing 1.16 PasswordConfirmation.htmMã:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head> <title>N i dung xác nh n m t kh u</title>ộ ậ ậ ẩ</head><body> N i dung xác nh n m t kh uộ ậ ậ ẩ Your new password is <% Password %>.</body></html>

Khi t o tài kho n thành công trong mail ch a đ ng m t kh u t sinh ra. Ng i s d ngạ ả ứ ự ậ ẩ ự ườ ử ụ s d ng m t kh u này đ đăng nh p trên website.ử ụ ậ ẩ ể ậTrong k ch b n th 2, ng i s d ng có th s d ng password mà ng i đó ch n. Tuyị ạ ứ ườ ử ụ ể ử ụ ườ ọ nhiên tài kho n này s b vô hi u hóa cho đ n khi ng i này nh p mã xác nh n.ả ẽ ị ệ ế ườ ậ ậĐi u khi n CreateUserWizard trong Listing 1.17 cho phép thu c tính DisableCreateUserề ể ộ và vô hi u hóa thu c tính LoginCreatedUser.ệ ộListing 1.17 CreateUserWizardCodeConfirmation.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CreateUserWizardCodeConfirmation.aspx.cs" Inherits="CreateUserWizardCodeConfirmation" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void CreateUserWizard1_SendingMail(object sender, MailMessageEventArgs e) { MembershipUser user = Membership.GetUser(CreateUserWizard1.UserName); string code = user.ProviderUserKey.ToString(); e.Message.Body = e.Message.Body.Replace("<%ConfirmationCode%>", code); } </script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>T o form đăng ký yêu c u xác nh n mã</title>ạ ầ ậ</head><body> <form id="form1" runat="server"> <div> <asp:CreateUserWizard id="CreateUserWizard1" CompleteSuccessText="A

confirmation email containing your new password has been sent to your email address." DisableCreatedUser="true" ContinueDestinationPageUrl="~/ConfirmCode.aspx" OnSendingMail="CreateUserWizard1_SendingMail" Runat="server">

<MailDefinition From="[email protected]" BodyFileName="CodeConfirmation.htm" IsBodyHtml="true" Subject="Registration Confirmation" /> </asp:CreateUserWizard> </div> </form></body></html>

Trong Listing 1.17 g m m t đi u khi n s ki n SendingMail. Mã s d ng là m t khóaồ ộ ề ể ự ệ ử ụ ộ duy nh t g i t i ng i s d ng b i MenberShip Provider. Mã xác nh n đ c đ trìnhấ ử ớ ườ ử ụ ở ậ ượ ệ trong mail tr c khi mail đ c g i. Mail này đ c ch a đ ng trong Listing 1.18ướ ượ ử ượ ứ ựListing 1.18 Mã:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head> <title>Untitled Page</title></head><body> <div> <%UserName%>, Mã xác nh n c a b n là <%ConfirmationCode%>ậ ủ ạ </div></body></html>

Sau khi hoàn thành Form đ a ra b i CreateUserWizard b n nh n vào nút Continue đư ở ạ ấ ể m trang ConfirmCode.aspx.ởListing 1.19 ConfirmCode.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConfirmCode.aspx.cs" Inherits="ConfirmCode" %>

<script runat="server">

protected void btnConfirm_Click(object sender, EventArgs e) { MembershipUser user = Membership.GetUser(txtUserName.Text); if (user == null) { lblError.Text = "Tên s d ng không đúng";ử ụ } else { string providerCode = user.ProviderUserKey.ToString(); string userCode = txtConfirmationCode.Text.Trim(); if (providerCode != userCode) { lblError.Text = "Sai mã các nh n";ậ } else { user.IsApproved = true; Membership.UpdateUser(user); Response.Redirect("~/Baomat/Secret.aspx"); } } } </script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>ki m tra xác nh n</title>ể ậ</head><body> <form id="form1" runat="server"> <div> <p> Nh p mã xác nh n mà b n đ c g i t mail.ậ ậ ạ ượ ử ừ </p> <asp:Label id="lblError" EnableViewState="false" ForeColor="Red" Runat="server" /> <br /><br /> <asp:Label id="lblUserName" Text="tên s d ng:"ử ụ AssociatedControlID="txtUserName" Runat="server" /> <br /> <asp:TextBox id="txtUserName" Runat="server" /> <br /><br /> <asp:Label id="lblConfirmationCode" Text="Mã xác nh n:"ậ

AssociatedControlID="txtConfirmationCode" Runat="server" /> <br /> <asp:TextBox id="txtConfirmationCode" Columns="50" Runat="server" /> <asp:Button id="btnConfirm" Text="Xác nh n" OnClick="btnConfirm_Click"ậ Runat="server" /> </div> </form></body></html>

1.4 S d ng đi u khi n LoginStatusử ụ ề ểĐi u khi n LoginStatus hi n th tr ng thái liên k t Login ho c Logout, ph thu c vàoề ể ể ị ạ ế ặ ụ ộ tr ng thái ki m ch ng c a b n. Khi b n nh n vào liên k t Link, b n đ c chuy n đ nạ ể ứ ủ ạ ạ ấ ế ạ ượ ể ế trang Login.aspx. Khi nh n vào liên k t Logout b n s đăng xu t kh i website.ấ ế ạ ẽ ấ ỏListing 1.20 ShowLoginStatus.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowLoginStatus.aspx.cs" Inherits="ShowLoginStatus" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>hi n th LoginStatus</title>ể ị</head><body> <form id="form1" runat="server"> <div> <asp:loginstatus ID="Loginstatus1" runat="server"></asp:loginstatus> </div> </form></body></html>

LoginStatus h tr các thu c tính sau:ỗ ợ ộ• LoginImageUrl: đ nh nghĩa m t nh cho Login Link.ị ộ ả• LoginText: đ nh nghĩa Text cho Login Link.ị• LogoutAction: cho phép b n đi u khi n vi c gì s x y ra khi b n nh n vào Logoutạ ề ể ệ ẽ ả ạ ấ Link. Có th là các giá tr sau:Redirect, RedirectToLoginPage,Refresh.ể ị• LogoutImageUrl: cho phép b n đ nh nghĩa nh cho Logout Link.ạ ị ả• LogoutPageUrl: Đ nh nghĩa trang mà ng i s d ng s chuy n đ n khi h đăng xu t.ị ườ ử ụ ẽ ể ế ọ ấ Thu c tính này m c đ nh s b b qua tr khi b n thi t l p thu c tính LogoutAction cóộ ặ ị ẽ ị ỏ ừ ạ ế ậ ộ giá tr là Redirect.ị• LogoutText:Đ nh nghĩa n i dung cho Logout Link.ị ộ

LoginStatus h tr hai s ki n sau:ỗ ợ ự ệ• LoggingOut: X y ra tr c khi ng i s d ng đăng xu tả ướ ườ ử ụ ấ• LoggedOut: X y ra sau khi ng i s d ng đăng xu tả ườ ử ụ ấ

1.5 S d ng đi u khi n LoginNameử ụ ề ểS d ng đi u khi n LoginName b n có th cho phép hi n th tên ng i s d ng đãử ụ ề ể ạ ể ể ị ườ ử ụ đ c đăng ký. N u ng i s d ng hi n t i không đ c ki m ch ng đi u khi nượ ế ườ ử ụ ệ ạ ượ ể ứ ề ể LoginName s đ a ra giá tr r ng.ẽ ư ị ỗListing 1.21 ShowLoginName.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowLoginName.aspx.cs" Inherits="ShowLoginName" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>hi n th LoginName</title>ể ị</head><body> <form id="form1" runat="server"> <div> <asp:LoginName id="LoginName1" FormatString="{0} /" Runat="server" /> <asp:LoginStatus id="LoginStatus1" Runat="server" /> </div> </form></body></html>

Trong Listing 1.21 trên b n th y r ng đi u khi n LoginName có ch a đ ng thu c tínhở ạ ấ ằ ề ể ứ ự ộ FormatString Nó cho phép b n đ nh d ng tên ng i s d ng khi tên ng i s d ng đ cạ ị ạ ườ ử ụ ườ ử ụ ượ đ a ra.ư

1.6 S d ng đi u khi n ChangePasswordử ụ ề ểĐi u khi n ChangePassword cho phép ng i s d ng hay ng i qu n tr có th thay đ iề ể ườ ử ụ ườ ả ị ể ổ m t kh u c a mìnhậ ẩ ủ

Listing 1.22 ShowChangePassword.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowChangePassword.aspx.cs" Inherits="ShowChangePassword" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>hi n th thay đ i m t kh u</title>ể ị ổ ậ ẩ <style type="text/css"> .changePassword { font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .changePassword_title { background-color:darkblue; color:white; font-weight:bold; } .changePassword_instructions { font-size:12px; text-align:left; padding:10px; } .changePassword_button { border:solid 1px black; padding:3px; } </style></head><body> <form id="form1" runat="server"> <div> <asp:LoginName ID="LoginName1" runat="server" /> <asp:ChangePassword id="ChangePassword1" InstructionText="Complete this form to create a new password." DisplayUserName="true" ContinueDestinationPageUrl="~/Default.aspx" CancelDestinationPageUrl="~/Default.aspx" CssClass="changePassword" TitleTextStyle-CssClass="changePassword_title" InstructionTextStyle-CssClass="changePassword_instructions" ChangePasswordButtonStyle-CssClass="changePassword_button" CancelButtonStyle-CssClass="changePassword_button"

ContinueButtonStyle-CssClass="changePassword_button" Runat="server" /> </div> </form></body></html>

K t xu t c a ch ng trìnhế ấ ủ ươ

Hình 6

1.6.1 G i m t Email thay đ i Passwordử ộ ổSau khi ng i s d ng thay đ i m t kh u thành công, b n có th s d ng đi u khi nườ ử ụ ổ ậ ẩ ạ ể ử ụ ề ể ChangePassword đ t đ ng g i m t email t i ng i s d ng v i n i dung ch a kèmể ự ộ ử ộ ớ ườ ử ụ ớ ộ ứ m t kh u m i c a ng i đó.ậ ẩ ớ ủ ườListing 1.23 ChangePasswordEmail.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ChangePasswordEmail.aspx.cs" Inherits="ChangePasswordEmail" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Thay đ i m t kh u</title>ổ ậ ẩ</head><body> <form id="form1" runat="server"> <div> <asp:ChangePassword id="ChangePassword1" DisplayUserName="true" Runat="server"> <MailDefinition From="[email protected]" BodyFileName="ChangePassword.txt" Subject="Your New Password" /> </asp:ChangePassword> </div> </form></body></html>

Trong đó n i dung file ChangePassword.txt có n i dung nh sauộ ộ ư<%UserName%>,

your new password is <%Password%>.

1.6.2 S d ng Templetes v i đi u khi n ChangePasswordử ụ ớ ề ểN u b n c n tùy ch nh cách xu t hi n c a đi u khi n ChangePassword b n có th sế ạ ầ ỉ ấ ệ ủ ề ể ạ ể ử d ng templetes đ đ nh d ng đi u khi n. Đi u khi n ChangePassword h tr c haiụ ể ị ạ ề ể ề ể ỗ ợ ả ChangePasswordTemplate và SuccessTemplate. Ví d sau s h ng d n b n s d ng cụ ẽ ướ ẫ ạ ử ụ ả hai temples này.Listing 1.24 ChangePasswordTemplate.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ChangePasswordTemplate.aspx.cs" Inherits="ChangePasswordTemplate" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>S d ng templete v i ChangePassword</title>ử ụ ớ</head><body> <form id="form1" runat="server"> <div> <asp:ChangePassword id="ChangePassword1" DisplayUserName="true" Runat="server"> <ChangePasswordTemplate> <h1>Thay đ i m t kh u</h1>ổ ậ ẩ <asp:Label id="FailureText" EnableViewState="false" ForeColor="Red" Runat="server" /> <br /> <asp:Label id="lblUserName" Text="Tên s d ng:"ử ụ AssociatedControlID="UserName" Runat="server" /> <br /> <asp:TextBox id="UserName" Runat="server" /> <br /><br /> <asp:Label id="lblCurrentPassword" Text="M t kh u hi n t i:"ậ ẩ ệ ạ AssociatedControlID="CurrentPassword" Runat="server" /> <br /> <asp:TextBox id="CurrentPassword" TextMode="Password" Runat="server" /> <br /><br /> <asp:Label id="lblNewPassword" Text="M t kh u m i:"ậ ẩ ớ AssociatedControlID="NewPassword" Runat="server" /> <br /> <asp:TextBox id="NewPassword" TextMode="Password" Runat="server" /> <br /><br /> <asp:Button id="btnChangePassword" Text="Change Password"

CommandName="ChangePassword" Runat="server" /> </ChangePasswordTemplate> <SuccessTemplate> Your password has been changed! </SuccessTemplate> </asp:ChangePassword> </div> </form></body></html>

K t xu t c a ch ng trìnhế ấ ủ ươ

Hình 7

Khi s d ng Templetes b n v i đi u khi n ChangePassword b n c n thêm vào các IDử ụ ạ ớ ề ể ạ ầ kèm theo• UserName• CurrentPassword• ConfirmPassword• NewPassword• FailureText

B n ch có th thêm vào các đi u khi n Button theo các giá tr cho thu c tínhạ ỉ ể ề ể ị ộ CommandName:• ChangePassword• Cancel• Continue

1.7 S d ng đi u khi n PasswordRecoveryử ụ ề ểN u ng i s d ng quên m t kh u c a mình, ng i đó có th s d ng đi u khi nế ườ ử ụ ậ ẩ ủ ườ ể ử ụ ề ể PasswwordRecovery đ khôi ph c m t kh u, đi u khi n PasswordRecovery s g i l iể ụ ậ ẩ ề ể ẽ ử ạ m t kh u ban đ u ho c t o m t m t kh u m i và g i t i cho ng i s d ng.ậ ẩ ầ ặ ạ ộ ậ ẩ ớ ử ớ ườ ử ụListing 1.25 showPasswordRecovery.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>show Password Recovery</title> <style type="text/css"> .passwordRecovery

{ font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .passwordRecovery_title { background-color:darkblue; color:white; font-weight:bold; } .passwordRecovery_instructions { font-size:12px; text-align:left; padding:10px; } .passwordRecovery_button { border:solid 1px black; padding:3px; } </style></head><body> <form id="form1" runat="server"> <div> <asp:PasswordRecovery id="PasswordRecovery1" CssClass="passwordRecovery" TitleTextStyle-CssClass="passwordRecovery_title" InstructionTextStyle-CssClass="passwordRecovery_instructions" SubmitButtonStyle-CssClass="passwordRecovery_button" Runat="server"> <MailDefinition From="[email protected]" Subject="Password Reminder" /> </asp:PasswordRecovery> </div> </form></body></html>

Khi ch y ch ng trình trên đ u tiên b n s b yêu c u nh p tên s d ng, ti p theo b nạ ươ ầ ạ ẽ ị ầ ậ ử ụ ế ạ ph i nh p câu tr l i bí m t mà b n s d ng trong lúc đăng ký, cu i cùng m t kh u sả ậ ả ờ ậ ạ ử ụ ố ậ ẩ ẽ

đ c g i đ n tài kho n email c a ng i đăng ký.ượ ử ế ả ủ ườB i m c đ nh đi u khi n PasswordRecovery s kh i t o m t kh u và g i đ n ng i sở ặ ị ề ể ẽ ở ạ ậ ẩ ử ế ườ ử d ng.ụ1.7.1 G i m t kh u ban đ uử ậ ẩ ầB i m c đ nh đi u khi n PasswordRecovery không g i m t kh u cũ c a ng i s d ng,ở ặ ị ề ể ử ậ ẩ ủ ườ ử ụ n u b n không mu n đi u khi n PasswordRecovery kh i t a l i password c a ng i sế ạ ố ề ể ở ọ ạ ủ ườ ử d ng tr c khi g i nó b n ph i thay đ i c u hình MenberShip Provider, Ba thi t l pụ ướ ử ạ ả ổ ấ ế ậ c u hình chính passwordFormat, enablePasswordRetrieval, và enablePasswordReset.ấB i m c đ nh thu c tính passwordFormat có giá tr là Hashed. Khi m t kh u đ cở ặ ị ộ ị ậ ẩ ượ Hashed, Đi u khi n PasswordRecovery không th g i m t kh u g c ban đ u c a ng iề ể ể ử ậ ẩ ố ầ ủ ườ s d ng, N u b n mu n ng i s d ng nh n đ c password cũ c a mình b n c n thi tử ụ ế ạ ố ườ ử ụ ậ ượ ủ ạ ầ ế l p thu c tính passwordFormat v các giá tr Clear ho c Encrypted.ậ ộ ề ị ặM c đ nh thu c tính enablePasswordRetrieval có giá tr là false, n u b n mu n ng i sặ ị ộ ị ế ạ ố ườ ử d ng nh n đ c m t kh u cũ b n ph i thi t l p cho phép thu c tính này trong fileụ ậ ượ ậ ẩ ạ ả ế ậ ộ web.config.Cu i cùng, m c đ nh thu c tính enablePasswordReset có giá tr là true, Nó không chú ýố ặ ị ộ ị đ n giá tr c a PasswordFormat hay enablePasswordRetrieval, b n có th luôn luôn kh iế ị ủ ạ ể ở t o l i m t kh u c a ng i s d ngạ ạ ậ ẩ ủ ườ ử ụListing 1.26 sau ch a đ ng nh ng c u hình c n thi t cho phép g i m t kh u cũ đ nứ ự ữ ấ ầ ế ử ậ ẩ ế ng i s d ng.ườ ử ụListing 1.26 Web.configMã:<?xml version="1.0"?>

<configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Windows" /> <membership defaultProvider="MyMenberShip"> <providers> <add name="MyMembership" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" passwordFormat="Clear" enablePasswordRetrieval="true" /> </providers> </membership> </system.web></configuration>

1.7.2 Yêu c u câu h i b o m t và tr l iầ ỏ ả ậ ả ờKhi b n s d ng CreateUserWizard đ t o form đăng ký, b n b yêu c u nh p câu h iạ ử ụ ể ạ ạ ị ầ ậ ỏ b o m t và câu tr l i cho câu h i đó, đi u khi n PasswordRecovery hi n th m t formả ậ ả ờ ỏ ề ể ể ị ộ ch a đ ng câu h i b o m t, n u b n không nh p vào đúng câu tr l i b o m t c a b n,ứ ự ỏ ả ậ ế ạ ậ ả ờ ả ậ ủ ạ m t kh u c a b n s không đ c g i.ậ ẩ ủ ạ ẽ ượ ử

N u b n không mu n ng i s d ng ph i nh p câu h i b o m t khi khôi ph c m tế ạ ố ườ ử ụ ả ậ ỏ ả ậ ụ ậ kh u, b n có th ch nh s a c u hình c a menbership, listing 1.27 sau s gán giá tr làẩ ạ ể ỉ ử ấ ủ ẽ ị false cho thu c tính requiresQuestionAndAnswer.ộListing 1.27 Mã:<?xml version="1.0"?><configuration> <system.web> <authentication mode="Forms" /> <membership defaultProvider="MyMembership"> <providers> <add name="MyMembership" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" requiresQuestionAndAnswer="false" /> </providers> </membership> </system.web></configuration>

Ch ng 2. S d ng ASP.NET MenberShipươ ử ụ

Trong ch ng tr c, b n đã đ c h c cách s d ng đi u khi n login đ t o form đăngươ ướ ạ ượ ọ ử ụ ề ể ể ạ ký ng i s d ng v i h th ng. Trong ch ng này chúng ta cùng khám phá và gi iườ ử ụ ớ ệ ố ươ ả nghĩa b o m t framework trên các đi u khi n Login.ả ậ ề ểASP.NET Framework bao g m 4 khung quan h b o m t:ồ ệ ả ậ• ASP.NET Authentication: Cho phép đ nh nghĩa ng i s d ng.ị ườ ử ụ• ASP.NET Authorization: Cho phép b n y nhi m quy n truy xu t d li u cho ng iạ ủ ệ ề ấ ữ ệ ườ s d ng.ử ụ• ASP.NET Membership: cho phép b n di n t ng i s d ng và ch nh s a các thu cạ ễ ả ườ ử ụ ỉ ử ộ tính nó.• Role Manager: Đ a ra vai trò c a ng i s d ng và ch nh s các thu c tính c a nó.ư ủ ườ ử ụ ỉ ử ộ ủ

2.1 C u hình Authenticationấng d ng ch d n x lý xác đ nh b n là ai. ASP.NET Framework h tr 3 ki u c a xácỨ ụ ỉ ẫ ử ị ạ ỗ ợ ể ủ

th c.ự• Windows Authentication• .NET Passport Authentication• Forms AuthenticationM t ng d ng riêng ch có th áp d ng m t ki u xác th c. b n không th ap d ng đ ngộ ứ ụ ỉ ể ụ ộ ể ự ạ ể ụ ồ th i nhi u ki u.ờ ề ểM c đ nh Windows authentication đ c cho phép, Khi windows authentication đ c choặ ị ượ ượ phép các tên tài kho n Micosoft Windows c a h . Vai trò phù h p v i nhóm Micisoftả ủ ọ ợ ớ Windows.Windows authentication y quy n ch u trách nhi m đ nh danh ng i s d ng trên IIS.ủ ề ị ệ ị ườ ử ụ

IIS có th s d ng c u hình Basic, Intergrated Windows, ho c Digest authentication.ể ử ụ ấ ặKi m ch ng .NET Passport gi ng v i ki m ch ng website c a Microsofts nh làể ứ ố ớ ể ứ ở ủ ư MSN hay Hotmail. N u b n mu n ng i s d ng đăng nh p trong ng d ng c a b nế ạ ố ườ ử ụ ậ ứ ụ ủ ạ b i các tài kho n Hotmail đã t n t i, b n có th cho phép ki m chúng .Net PassPort.ở ả ồ ạ ạ ể ểCu i cùng là ki u ki m ch ng Form Authentication. Khi Form Authentication đ c choố ể ể ứ ượ phép, Các ng i s d ng đ c đ nh nghĩa b i m t cookie. Khi ng i s d ng đ cườ ử ụ ượ ị ở ộ ườ ử ụ ượ ki m ch ng. M t cookie mã hóa đ c thêm vào trình duy t c a ng i s d ng.ể ứ ộ ượ ệ ủ ườ ử ụKhi Form Authentication đ c cho phép, ng i s d ng và và thông tin vai trò đ c l uượ ườ ử ụ ượ ư tr trong m t kho d li u tùy bi n. Ví d b n có th l u tr tên ng i s d ng và mâtữ ộ ữ ệ ế ụ ạ ể ư ữ ườ ử ụ kh u trong m t file XML, database, hay m t file Text c b n.ẩ ộ ộ ơ ả2.1.1 C u hinh Form AuthenticationấCác l a ch n c u hình riêng đ c ch đ nh đ n Form Authenticationự ọ ấ ượ ỉ ị ế• Cookieless: Cho phép b n s d ng s ki n Form authentication khi trình duy t khôngạ ử ụ ự ệ ệ h tr Cookie, có th là các giá tr : UseCookies, UseUri, AutoDetect, vàỗ ợ ể ị UseDeviceProfile. M c đ nh giá tr là UseDeviceProfile.ặ ị ị• defaultUrl: Cho phép b n ch đ nh trang mà sau khi ng i s d ng đ c ki m ch ngạ ỉ ị ườ ử ụ ượ ể ứ chuy n t i. m c đ nh là giá tr Default.aspx.ể ớ ặ ị ị• domain: cho phép b n ch đ nh domain đ c k t h p m i ki m ch ng Cookie, giá trạ ỉ ị ượ ế ợ ớ ể ứ ị m c đ nh là r ng. ặ ị ỗ• enableCrossAppRedirects: Cho phép ng i s d ng ki m ch ng qua ng d ng b ngườ ử ụ ể ứ ứ ụ ằ cách th xác th c trong m t chu i truy v n.. Giá tr m c đ nh là fasle.ẻ ự ộ ỗ ấ ị ặ ị• loginUrl: Cho phép b n ch đ nh đ ng d n t i trang Login. Giá tr m c đ nh làạ ỉ ị ườ ẫ ớ ị ặ ị Login.aspx• name: Cho phép b n ch đ nh tên c a cookie ki m ch ng. giá tr m c đ nh làạ ỉ ị ủ ể ứ ị ặ ị .ASPXAUTH.• path: Cho phép b n ch đ nh đ ng d n k t h p v i cookie ki m ch ng m c đ nh giáạ ỉ ị ườ ẫ ế ợ ớ ể ứ ặ ị tr là /.ị• Protection: cho phép b n ch đ nh cookie ki m ch ng đ c mã hóa nh th nào. Giá trạ ỉ ị ể ứ ượ ư ế ị có th là All, Encryption, None và Validation, giá tr m c đ nh là All.ể ị ặ ị• requiresSSL: Cho phép b n yêu c u m t SSL(Secure Sockets Layer) k t n i khi truy nạ ầ ộ ế ố ề cookie ki m ch ng. m c đ nh giá tr là false.ể ứ ặ ị ị• slidingExpiration: Cho phép b n ngăn c n cookie xác th c h t h n nh là ng i sạ ả ự ế ạ ư ườ ử d ng ti p t c t o m t yêu c u trong m t kho ng th i gian, có th có giá tr là Falseụ ế ụ ạ ộ ầ ộ ả ờ ể ị ho c True, m c đ nh là Fasle.ặ ặ ị• timeout: Cho phép b n ch đ nh m t l ng th i gian h t h n c a cookie xác th c tínhạ ỉ ị ộ ượ ờ ế ạ ủ ự b i phút. Giá tr m c đ nh là 30.ở ị ặ ịVí d sau s thay đ i tên c a cookie authentication.ụ ẽ ổ ủListing 2.1 web1.config

Mã:<?xml version="1.0"?><configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms" >

<forms name="MyApp" /> </authentication> </system.web></configuration>

2.1.2 S d ng ki m ch ng Cookieless Forms.ử ụ ể ứBình th ng, ki m ch ng Form s d ng m t cookie đ xác đ nh ng i s d ng, tuyườ ể ứ ử ụ ộ ể ị ườ ử ụ nhiên Forms authentication h tr m t thu c tính đ t tên là cookieless authentication.ỗ ợ ộ ộ ặ Khi cookieless authentication đ c cho phép, m t ng i s d ng có th đ c đ nh danhượ ộ ườ ử ụ ể ượ ị ngoài cookie c a trình duy t.ủ ệB i vi c thêm vào ki m ch ng cookieless, b n có th s d ng Forms Authentication vàở ệ ể ứ ạ ể ử ụ ASP.NET Menbership đ ki m ch ng ng i s d ng, m t ng i s d ng có th đ cể ể ứ ườ ử ụ ộ ườ ử ụ ể ượ đ nh nghĩa b i m t th duy nh t đ c thêm vào đ a ch URL. N u ng i s d ng sị ở ộ ẻ ấ ượ ị ỉ ế ườ ử ụ ử d ng các URL quan h t i đ ng d n t trang này t i trang khác, sau đó th này đ cụ ệ ớ ườ ẫ ừ ớ ẻ ượ truy n qua gi a các trang t đ ng và ng i s d ng có th đ c đ nh danh trên nhi uề ữ ự ộ ườ ử ụ ể ượ ị ề trang.Khi b n g i m t trang mà yêu c u xác th c và xác th c cookieless đ c cho phép, đ aạ ọ ộ ầ ự ự ượ ị ch URL trên trình duy t nhìn gi ng nh sau:ỉ ệ ố ưhttp://localhost:2500/Original/(F(WfAne ... VllOKdQkRktOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-cZwyr4ojyU6EnarC-bbf8g4sl6m4k5kk6Nmcsg1))/SecretFiles/Secret2.aspx

B n c u hình ki m ch ng cookieless b i vi c gán m t giá tr c a thành ph n form trongạ ấ ể ứ ở ệ ộ ị ủ ầ file web.config. thu c tính cookieless ch p nh n m t vài thu c tính sau:ộ ấ ậ ộ ộ• UseCookies: luôn luôn s d ng cookie xác th c.ử ụ ự• UseUri: Không bao gi s d ng cookie xác th c.ờ ử ụ ự• AutoDetect: t đ ng phát hi n đ s d ng cookie xác th c.ự ộ ệ ể ử ụ ự• UseDeviceProfile: s d ng profile đ đ nh rõ khi nào đ s d ng cookie xác th c.ử ụ ể ị ể ử ụ ựM c đ nh là giá tr UseDeviceProfile. B i m c đ nh ASP.NET Framework là m t cookieặ ị ị ở ặ ị ộ ch khi nào m t ki u riêng c a thi t b h tr cookie. ASP.NET Framework duy trì m tỉ ộ ể ủ ế ị ỗ ợ ộ c s d li u tùy thu c kh năng thi t b trong thi t l p c a các file ch a đ ng theoơ ở ữ ệ ộ ả ế ị ế ậ ủ ứ ự đ ng d n sau:ườ ẫ\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\BrowsersB i m c đ nh ASP.NET Framework không bao gi s d ng xác th c cookieless v i m tở ặ ị ờ ử ụ ự ớ ộ trình duy t nh là IE. N u b n mu n ASP.NET Framework t đ ng phát hi n trìnhệ ư ế ạ ố ự ộ ệ duy t có h tr cookie hay không thì b n thi t l p thu c tính cookieless có giá trì làệ ỗ ợ ạ ế ậ ộ AutoDetect.

Listing 2.2Mã: <configuration> <system.web> <authentication mode="Forms" > <forms cookieless="AutoDetect"></forms> </authentication>

</system.web> </configuration>

2.1.3 S d ng s h t h n tr t v i Forms Authenticationử ụ ự ế ạ ượ ớB i m c đ nh Forms Authentication s d ng các hgi i quy t tr t h t h n, Ng i sở ặ ị ử ụ ả ế ượ ế ạ ườ ử d ng không yêu c u trang trong vòng 30 phút, trang s t đ ng đăng xu t.ụ ầ ẽ ự ộ ấN u b n có yêu c u b o m t đúng đ n, b n có th s d ng gi i pháp th i h n tuy t đ iế ạ ầ ả ậ ắ ạ ể ử ụ ả ờ ạ ệ ố thay cho tr t th i h n. Trong tr ng h p này, b n có th hi u l c m t ng i s d ngượ ờ ạ ườ ợ ạ ể ệ ự ộ ườ ử ụ đăng nh p l i sau m t kho ng th i gian riêng.ậ ạ ộ ả ờ

Listing 2.3Mã:<?xml version="1.0"?><configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms" > <forms slidingExpiration="false" timeout="1" /> </authentication> </system.web></configuration>

2.1.4 S d ng Forms authentication ngang qua ng d ngử ụ ứ ụTrong ph n tr c b n đ c h c chia s xác th c cookie qua các ng d ng khác nhauầ ướ ạ ượ ọ ẻ ự ứ ụ trong cùng server ho c server khác nhau, trong ph n này b n s h c cách chia s xácặ ầ ạ ẽ ọ ẻ th c cookie qua nh domain.ự ưM t cookie trình duy t luôn quan h v i domain, Vi d website Amazon không th đ cộ ệ ệ ớ ụ ể ọ cookie thi t l p b i website itechpro ho c vietnamnet. Tuy nhiên b n có th khám pháế ậ ở ặ ạ ể r ng b n c n chia s thông tin xác th c qua nhi u website v i nhi u domain khác nhau.ằ ạ ầ ẻ ự ề ớ ềB n có th làm vi c quanh v n đ này b i vi c truy n th xác th c trong m t chu iạ ể ệ ấ ề ở ệ ề ẻ ự ộ ỗ truy v n h n là trong m t cookie Không có gì ngăn c n b n truy n tham s qua cácấ ơ ộ ả ạ ề ố domain khác nhau.Đ có th cho phép trong ng c nh này, b n ph i c u hình ng d ng c a b n ch pể ể ữ ả ạ ả ấ ứ ụ ủ ạ ấ nh n th xác th c đ c truy n trong chu i truy v n, nh ví d sau:ậ ẻ ự ượ ề ỗ ấ ư ụ

Listing 2.4 web4.configMã:<configuration> <system.web> <authentication mode="Forms" > <forms enableCrossAppRedirects="true" /> </authentication> <machineKey decryption="AES" validation="SHA1" decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DACA53DBB3C3E0AD2"

validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DAB98B8EFD19C711337E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E44B2247792265" /> </system.web></configuration>

N u b n c u hình nh Listing 2.4 cho phép hai ng d ng khác nhau đ nh v trên cácế ạ ấ ư ứ ụ ị ị domain khác nhau, hai ng d ng khác nhau có th chia s th ki m ch ng khác nhau.ứ ụ ể ẻ ẻ ể ứKhi b n liên k t ho c chuy n san trang t m t trang khác b n ph i truy n th ki mạ ế ặ ể ừ ộ ạ ả ề ẻ ể ch ng này trong chu i tham s truy v nứ ỗ ố ấ

Listing 2.5 QueryStringAuthenticate.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QueryStringAuthenticate.aspx.cs" Inherits="QueryStringAuthenticate" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> void Page_Load() { string cookieName = FormsAuthentication.FormsCookieName; string cookieValue = FormsAuthentication.GetAuthCookie(User.Identity.Name, false).Value; lnkOtherDomain.NavigateUrl += String.Format("?{0}={1}", cookieName, cookieValue); }</script>

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <div> <asp:HyperLink id="lnkOtherDomain" Text="liên k t t i Domain khác"ế ớ NavigateUrl="http://www.OtherDomain.com/Secret.aspx" Runat="server" /> </div> </form></body></html>

2.1.5 S d ng L p FormsAuthenticationử ụ ớGiao ti p l p trình ng d ng chính cho t ng tác v i ki m ch ng Forms là l pế ậ ứ ụ ươ ớ ể ứ ớ

FormsAuthentication L p này h tr các thu c tinh sau:ớ ỗ ợ ộ• CookieDomain: Tr v domain k t h p v i cookie xác th cả ề ế ợ ớ ự• CookieMode: Tr v ki u xác th c cookieless. Có th là các giá tr : AutoDetect,ả ề ể ự ể ị UseCookies, UseDeviceProfile, and UseUri.• CookiesSupported: Tr v đúng khi trình duy t h tr cookie và xác th c Forms đ cả ề ệ ỗ ợ ự ượ c u hình đ s d ng cookies.ấ ể ử ụ• DefaultUrl: Tr v URL c a trang mà ng i s d ng đ c chuy n t i sau khi đ cả ề ủ ườ ử ụ ượ ể ớ ượ ki m ch ng.ể ứ• EnableCrossAppRedirects: Tr v true khi th ki m ch ng có th g b t chu i truyả ề ẻ ể ứ ể ỡ ỏ ừ ỗ v nấ• FormsCookieName: tr v tên c a cookie xác th cả ề ủ ự• FormsCookiePath: Tr v đ ng d n k t h p v i cookie ki m ch ng.ả ề ườ ẫ ế ợ ớ ể ứ• LoginUrl: tr v URL c a trang mà ng i s d ng đ c chuy n t i khi s đ c ki mả ề ủ ườ ử ụ ượ ể ớ ẽ ượ ể ch ng.ứ• RequireSSL: Tr v đúng khi cookie ki m ch ng ph i đ c truy n thông v i SSL.ả ề ể ứ ả ượ ề ớ• SlidingExpiration: Tr v True khi cookie ki m ch ng s d ng chính sách tr t quáả ề ể ứ ử ụ ượ h n.ạCác thu c tính này tr v các thi t l p c u hình trong file web.configộ ả ề ế ậ ấL p FormsAuthentication h tr các ph ng th c sau:ớ ỗ ợ ươ ứ• Authenticate: Cho phép b n ki m tra l i UserName và Password d a vào m t danhạ ể ạ ự ộ sách UserName và Password đ c l u tr trong file web.config.ượ ư ữ• Decrypt: cho phép b n gi i mã m t cookie xác th cạ ả ộ ự• GetAuthCookie: Cho phép b n l y thông tin cookie xác th c.ạ ấ ự• GetRedirectUrl: Cho phép b n l y thông tin đ ng d n trang ban đ u gây ra chuy nạ ấ ườ ẫ ầ ể t i trang Login.aspx.ớ• HashPasswordForStoringInConfigFile: Cho phép b n l u tr m t m t kh u mà nó cóạ ư ữ ộ ậ ẩ th đ c l u tr trong file web.config.ể ượ ư ữ• RedirectFromLoginPage: Cho phép b n chuy n ng i s d ng quay tr l i trang banạ ể ườ ử ụ ở ạ đ u đ c yêu c u tr c khi ng i s d ng đ c chuy n t i trang Login.aspx.ầ ượ ầ ướ ườ ử ụ ượ ể ớ• RedirectToLoginPage: cho phép chuy n ng i s d ng t i trang Login.aspxể ườ ử ụ ớ• RenewTicketIfOld: Cho phép b n c p nh t th i gian h t h n c a cookie ki m ch ng.ạ ậ ậ ờ ế ạ ủ ể ứ• SetAuthCookie: Cho phép b n t o và đ a ra m t cookie ki m ch ng.ạ ạ ư ộ ể ứ• SignOut: Cho phép b n g b m t cookie ki m ch ng và đăng xu t ng i s d ng.ạ ỡ ỏ ộ ể ứ ấ ườ ử ụB n có th s d ng các ph ng th c và thu c tính c a l p FormsAuthentication đ xâyạ ể ử ụ ươ ứ ộ ủ ớ ể d ng ng i đăng ký s d ng và h th ng ki m ch ng ngoài vi c s d ng ASP.NETự ườ ử ụ ệ ố ể ứ ệ ử ụ Menbership. Ví d Listing 2.6 ch a đ ng m t danh sách tên s d ng và m t kh u ụ ứ ự ộ ử ụ ậ ẩ

Listing 2.6 web6.configMã:<configuration> <system.web> <authentication mode="Forms"> <forms> <credentials passwordFormat="Clear"> <user name="Bill" password="secret" /> <user name="Jane" password="secret" />

<user name="Fred" password="secret" /> </credentials> </forms> </authentication> </system.web></configuration>

Listing 2.6 ch a đ ng thành ph n forms mà ch a đ ng thành ph n credentials.ứ ự ầ ứ ự ầ credentials bao g m m t danh sách UserName và Password.ồ ộChú ý r ng thành ph n credentials ch a m t thu c tính PasswordFormatmà đ c thi tằ ầ ứ ộ ộ ượ ế l p v i giá tr Clear, N u b n thích l u tr m t kh u trong Text h n b n có th l u trậ ớ ị ế ạ ư ữ ậ ẩ ơ ạ ể ư ữ m t kh u trong các giá tr hash, V i con đ ng đó thì b t c ai trên webserver không thậ ẩ ị ớ ườ ấ ứ ể nhìn th y m t kh u c a ng i khác. Tr ng h p 2 giá tr c a PasswordFormat có th làấ ậ ẩ ủ ườ ườ ợ ị ủ ể MD5 và SHA1.

Listing 2.7 FormsLogin.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FormsLogin.aspx.cs" Inherits="FormsLogin" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void btnLogin_Click(object sender, EventArgs e) { if (FormsAuthentication.Authenticate(txtUserName.Text,txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked); else lblError.Text = "Invalid user name/password"; }</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Đăng nh p h th ng</title>ậ ệ ố</head><body> <form id="form1" runat="server"> <div> <asp:Label id="lblError" EnableViewState="false" ForeColor="Red" Runat="server" /> <br /><br /> <asp:Label id="lblUserName" Text="User Name:" AssociatedControlID="txtUserName" Runat="server" /> <br /> <asp:TextBox id="txtUserName" Runat="server" />

<br /><br /> <asp:Label id="lblPassword" Text="Password:" AssociatedControlID="txtPassword" Runat="server" /> <br /> <asp:TextBox id="txtPassword" TextMode="Password" Runat="server" /> <br /><br /> <asp:CheckBox id="chkRememberMe" Text="Remember Me" Runat="server" /> <br /><br /> <asp:Button id="btnLogin" Text="Login" OnClick="btnLogin_Click" Runat="server" /> </div> </form></body></html>

Khi b n nh n vào nút Button Login, hàm btnLogin_Click() đ c th c thi và ph ngạ ấ ượ ự ươ th c FormsAuthentication.Authenticate() đ c s d ng đ ki m tra tên s d ng và m tứ ượ ử ụ ể ể ử ụ ậ kh u nh p trong Textbox có trong fike web.config không. N u ng i s d ng xác th cẩ ậ ế ườ ử ụ ự thành công thì ph ng th c FormsAuthentication.RedirectFromLoginPage() đ c g i.ươ ứ ượ ọPh ng th c RedirectFromLoginPage() làm hai vi c: thêm m t cookie xác th c vàoươ ứ ệ ộ ự trình duy t c a ng i s d ng và chuy n ng i s d ng t i trang đ u tiên b chuy nệ ủ ườ ử ụ ể ươ ử ụ ớ ầ ị ể sang trang Login.aspx. N u ng i s d ng yêu c u tr c ti p trang Login.aspx thì nó sế ườ ử ụ ầ ự ế ẽ chuy n v trang Default.aspx.ể ềTham s th 2 truy n t i ph ng th c RedirectFromLoginPage() cho bi t có b n cóố ứ ề ớ ươ ứ ế ạ mu n s d ng m t session hay m t persistent cookie hay không. N u b n t o m tố ử ụ ộ ộ ế ạ ạ ộ persistent cookie thì b n không c n ph i đăng nh p trang web khi b n tr l i trong m tạ ầ ả ậ ạ ở ạ ộ th i gian sau đó.ờ2.1.6 S d ng l p Userử ụ ớB n có th s d ng thu c tính Page.User ho c HttpContext.User đ l y thông tin vạ ể ử ụ ộ ặ ể ấ ề ng i s d ng hi n t i. Thu c tính Page.User đ a ra m t đ i t ng Principal mà h trườ ử ụ ệ ạ ộ ư ộ ố ượ ỗ ợ ph ng th c sau:ươ ứIsInRole: Cho phép ki m tra ng i s d ng có ph i là m t thành viên c a Role riêngể ườ ử ụ ả ộ ủ hay không. Ví d Khi Windows Authentication đ c cho phép, b n có th s d ng ph ng th cụ ượ ạ ể ử ụ ươ ứ IsInRole đ ki m tra ng i s d ng có ph i là thành viên c a nhóm riêng trong MSể ể ườ ử ụ ả ủ Windows nh là nhóm BUILTIN\Administrators hay không?ưif (User.IsInRole(“BUILTIN\Administrators”)){// th c hi n công vi c c a qu n tr viên h đi u hànhự ệ ệ ủ ả ị ệ ề}Đ i t ng Principal ch bao g m m t thu c tính Identity cho phép b n l y thông tin vố ượ ỉ ồ ộ ộ ạ ấ ề đ c tính c a ng i s d ng hi n t i. Đ i t ng Indentity h tr ba thu c tính sau:ặ ủ ườ ử ụ ệ ạ ố ượ ỗ ợ ộAuthenticationType: cho phép b n xác đ nh ng i s d ng đ c ki m ch ng nh thạ ị ườ ử ụ ượ ể ứ ư ế nào có th là các giá tr : Forms, Basic, và NTLM.ể ị

IsAuthenticated: cho phép b n xác đ nh ng i s d ng có đ c ki m ch ng hay không.ạ ị ưở ử ụ ượ ể ứName: cho phép l y thông tin tên c a ng i s d ng.ấ ủ ườ ử ụ

Ch ng 2. S d ng ASP.NET MenberShipươ ử ụTrong ch ng tr c, b n đã đ c h c cách s d ng đi u khi n login đ t o form đăngươ ướ ạ ượ ọ ử ụ ề ể ể ạ ký ng i s d ng v i h th ng. Trong ch ng này chúng ta cùng khám phá và gi iườ ử ụ ớ ệ ố ươ ả nghĩa b o m t framework trên các đi u khi n Login.ả ậ ề ểASP.NET Framework bao g m 4 khung quan h b o m t:ồ ệ ả ậ• ASP.NET Authentication: Cho phép đ nh nghĩa ng i s d ng.ị ườ ử ụ• ASP.NET Authorization: Cho phép b n y nhi m quy n truy xu t d li u cho ng iạ ủ ệ ề ấ ữ ệ ườ s d ng.ử ụ• ASP.NET Membership: cho phép b n di n t ng i s d ng và ch nh s a các thu cạ ễ ả ườ ử ụ ỉ ử ộ tính nó.• Role Manager: Đ a ra vai trò c a ng i s d ng và ch nh s các thu c tính c a nó.ư ủ ườ ử ụ ỉ ử ộ ủ

2.1 C u hình Authenticationấng d ng ch d n x lý xác đ nh b n là ai. ASP.NET Framework h tr 3 ki u c a xácỨ ụ ỉ ẫ ử ị ạ ỗ ợ ể ủ

th c.ự• Windows Authentication• .NET Passport Authentication• Forms AuthenticationM t ng d ng riêng ch có th áp d ng m t ki u xác th c. b n không th ap d ng đ ngộ ứ ụ ỉ ể ụ ộ ể ự ạ ể ụ ồ th i nhi u ki u.ờ ề ểM c đ nh Windows authentication đ c cho phép, Khi windows authentication đ c choặ ị ượ ượ phép các tên tài kho n Micosoft Windows c a h . Vai trò phù h p v i nhóm Micisoftả ủ ọ ợ ớ Windows.Windows authentication y quy n ch u trách nhi m đ nh danh ng i s d ng trên IIS.ủ ề ị ệ ị ườ ử ụ IIS có th s d ng c u hình Basic, Intergrated Windows, ho c Digest authentication.ể ử ụ ấ ặKi m ch ng .NET Passport gi ng v i ki m ch ng website c a Microsofts nh làể ứ ố ớ ể ứ ở ủ ư MSN hay Hotmail. N u b n mu n ng i s d ng đăng nh p trong ng d ng c a b nế ạ ố ườ ử ụ ậ ứ ụ ủ ạ b i các tài kho n Hotmail đã t n t i, b n có th cho phép ki m chúng .Net PassPort.ở ả ồ ạ ạ ể ểCu i cùng là ki u ki m ch ng Form Authentication. Khi Form Authentication đ c choố ể ể ứ ượ phép, Các ng i s d ng đ c đ nh nghĩa b i m t cookie. Khi ng i s d ng đ cườ ử ụ ượ ị ở ộ ườ ử ụ ượ ki m ch ng. M t cookie mã hóa đ c thêm vào trình duy t c a ng i s d ng.ể ứ ộ ượ ệ ủ ườ ử ụKhi Form Authentication đ c cho phép, ng i s d ng và và thông tin vai trò đ c l uượ ườ ử ụ ượ ư tr trong m t kho d li u tùy bi n. Ví d b n có th l u tr tên ng i s d ng và mâtữ ộ ữ ệ ế ụ ạ ể ư ữ ườ ử ụ kh u trong m t file XML, database, hay m t file Text c b n.ẩ ộ ộ ơ ả2.1.1 C u hinh Form AuthenticationấCác l a ch n c u hình riêng đ c ch đ nh đ n Form Authenticationự ọ ấ ượ ỉ ị ế• Cookieless: Cho phép b n s d ng s ki n Form authentication khi trình duy t khôngạ ử ụ ự ệ ệ h tr Cookie, có th là các giá tr : UseCookies, UseUri, AutoDetect, vàỗ ợ ể ị UseDeviceProfile. M c đ nh giá tr là UseDeviceProfile.ặ ị ị• defaultUrl: Cho phép b n ch đ nh trang mà sau khi ng i s d ng đ c ki m ch ngạ ỉ ị ườ ử ụ ượ ể ứ chuy n t i. m c đ nh là giá tr Default.aspx.ể ớ ặ ị ị• domain: cho phép b n ch đ nh domain đ c k t h p m i ki m ch ng Cookie, giá trạ ỉ ị ượ ế ợ ớ ể ứ ị

m c đ nh là r ng. ặ ị ỗ• enableCrossAppRedirects: Cho phép ng i s d ng ki m ch ng qua ng d ng b ngườ ử ụ ể ứ ứ ụ ằ cách th xác th c trong m t chu i truy v n.. Giá tr m c đ nh là fasle.ẻ ự ộ ỗ ấ ị ặ ị• loginUrl: Cho phép b n ch đ nh đ ng d n t i trang Login. Giá tr m c đ nh làạ ỉ ị ườ ẫ ớ ị ặ ị Login.aspx• name: Cho phép b n ch đ nh tên c a cookie ki m ch ng. giá tr m c đ nh làạ ỉ ị ủ ể ứ ị ặ ị .ASPXAUTH.• path: Cho phép b n ch đ nh đ ng d n k t h p v i cookie ki m ch ng m c đ nh giáạ ỉ ị ườ ẫ ế ợ ớ ể ứ ặ ị tr là /.ị• Protection: cho phép b n ch đ nh cookie ki m ch ng đ c mã hóa nh th nào. Giá trạ ỉ ị ể ứ ượ ư ế ị có th là All, Encryption, None và Validation, giá tr m c đ nh là All.ể ị ặ ị• requiresSSL: Cho phép b n yêu c u m t SSL(Secure Sockets Layer) k t n i khi truy nạ ầ ộ ế ố ề cookie ki m ch ng. m c đ nh giá tr là false.ể ứ ặ ị ị• slidingExpiration: Cho phép b n ngăn c n cookie xác th c h t h n nh là ng i sạ ả ự ế ạ ư ườ ử d ng ti p t c t o m t yêu c u trong m t kho ng th i gian, có th có giá tr là Falseụ ế ụ ạ ộ ầ ộ ả ờ ể ị ho c True, m c đ nh là Fasle.ặ ặ ị• timeout: Cho phép b n ch đ nh m t l ng th i gian h t h n c a cookie xác th c tínhạ ỉ ị ộ ượ ờ ế ạ ủ ự b i phút. Giá tr m c đ nh là 30.ở ị ặ ịVí d sau s thay đ i tên c a cookie authentication.ụ ẽ ổ ủ

Listing 2.1 web1.configMã:<?xml version="1.0"?><configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms" > <forms name="MyApp" /> </authentication> </system.web></configuration>

2.1.2 S d ng ki m ch ng Cookieless Forms.ử ụ ể ứBình th ng, ki m ch ng Form s d ng m t cookie đ xác đ nh ng i s d ng, tuyườ ể ứ ử ụ ộ ể ị ườ ử ụ nhiên Forms authentication h tr m t thu c tính đ t tên là cookieless authentication.ỗ ợ ộ ộ ặ Khi cookieless authentication đ c cho phép, m t ng i s d ng có th đ c đ nh danhượ ộ ườ ử ụ ể ượ ị ngoài cookie c a trình duy t.ủ ệB i vi c thêm vào ki m ch ng cookieless, b n có th s d ng Forms Authentication vàở ệ ể ứ ạ ể ử ụ ASP.NET Menbership đ ki m ch ng ng i s d ng, m t ng i s d ng có th đ cể ể ứ ườ ử ụ ộ ườ ử ụ ể ượ đ nh nghĩa b i m t th duy nh t đ c thêm vào đ a ch URL. N u ng i s d ng sị ở ộ ẻ ấ ượ ị ỉ ế ườ ử ụ ử d ng các URL quan h t i đ ng d n t trang này t i trang khác, sau đó th này đ cụ ệ ớ ườ ẫ ừ ớ ẻ ượ truy n qua gi a các trang t đ ng và ng i s d ng có th đ c đ nh danh trên nhi uề ữ ự ộ ườ ử ụ ể ượ ị ề trang.Khi b n g i m t trang mà yêu c u xác th c và xác th c cookieless đ c cho phép, đ aạ ọ ộ ầ ự ự ượ ị ch URL trên trình duy t nhìn gi ng nh sau:ỉ ệ ố ư

http://localhost:2500/Original/(F(WfAne ... VllOKdQkRktOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-cZwyr4ojyU6EnarC-bbf8g4sl6m4k5kk6Nmcsg1))/SecretFiles/Secret2.aspx

B n c u hình ki m ch ng cookieless b i vi c gán m t giá tr c a thành ph n form trongạ ấ ể ứ ở ệ ộ ị ủ ầ file web.config. thu c tính cookieless ch p nh n m t vài thu c tính sau:ộ ấ ậ ộ ộ• UseCookies: luôn luôn s d ng cookie xác th c.ử ụ ự• UseUri: Không bao gi s d ng cookie xác th c.ờ ử ụ ự• AutoDetect: t đ ng phát hi n đ s d ng cookie xác th c.ự ộ ệ ể ử ụ ự• UseDeviceProfile: s d ng profile đ đ nh rõ khi nào đ s d ng cookie xác th c.ử ụ ể ị ể ử ụ ựM c đ nh là giá tr UseDeviceProfile. B i m c đ nh ASP.NET Framework là m t cookieặ ị ị ở ặ ị ộ ch khi nào m t ki u riêng c a thi t b h tr cookie. ASP.NET Framework duy trì m tỉ ộ ể ủ ế ị ỗ ợ ộ c s d li u tùy thu c kh năng thi t b trong thi t l p c a các file ch a đ ng theoơ ở ữ ệ ộ ả ế ị ế ậ ủ ứ ự đ ng d n sau:ườ ẫ\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\BrowsersB i m c đ nh ASP.NET Framework không bao gi s d ng xác th c cookieless v i m tở ặ ị ờ ử ụ ự ớ ộ trình duy t nh là IE. N u b n mu n ASP.NET Framework t đ ng phát hi n trìnhệ ư ế ạ ố ự ộ ệ duy t có h tr cookie hay không thì b n thi t l p thu c tính cookieless có giá trì làệ ỗ ợ ạ ế ậ ộ AutoDetect.

Listing 2.2Mã: <configuration> <system.web> <authentication mode="Forms" > <forms cookieless="AutoDetect"></forms> </authentication> </system.web> </configuration>

2.1.3 S d ng s h t h n tr t v i Forms Authenticationử ụ ự ế ạ ượ ớB i m c đ nh Forms Authentication s d ng các hgi i quy t tr t h t h n, Ng i sở ặ ị ử ụ ả ế ượ ế ạ ườ ử d ng không yêu c u trang trong vòng 30 phút, trang s t đ ng đăng xu t.ụ ầ ẽ ự ộ ấN u b n có yêu c u b o m t đúng đ n, b n có th s d ng gi i pháp th i h n tuy t đ iế ạ ầ ả ậ ắ ạ ể ử ụ ả ờ ạ ệ ố thay cho tr t th i h n. Trong tr ng h p này, b n có th hi u l c m t ng i s d ngượ ờ ạ ườ ợ ạ ể ệ ự ộ ườ ử ụ đăng nh p l i sau m t kho ng th i gian riêng.ậ ạ ộ ả ờ

Listing 2.3Mã:<?xml version="1.0"?><configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms" > <forms slidingExpiration="false" timeout="1" />

</authentication> </system.web></configuration>

2.1.4 S d ng Forms authentication ngang qua ng d ngử ụ ứ ụTrong ph n tr c b n đ c h c chia s xác th c cookie qua các ng d ng khác nhauầ ướ ạ ượ ọ ẻ ự ứ ụ trong cùng server ho c server khác nhau, trong ph n này b n s h c cách chia s xácặ ầ ạ ẽ ọ ẻ th c cookie qua nh domain.ự ưM t cookie trình duy t luôn quan h v i domain, Vi d website Amazon không th đ cộ ệ ệ ớ ụ ể ọ cookie thi t l p b i website itechpro ho c vietnamnet. Tuy nhiên b n có th khám pháế ậ ở ặ ạ ể r ng b n c n chia s thông tin xác th c qua nhi u website v i nhi u domain khác nhau.ằ ạ ầ ẻ ự ề ớ ềB n có th làm vi c quanh v n đ này b i vi c truy n th xác th c trong m t chu iạ ể ệ ấ ề ở ệ ề ẻ ự ộ ỗ truy v n h n là trong m t cookie Không có gì ngăn c n b n truy n tham s qua cácấ ơ ộ ả ạ ề ố domain khác nhau.Đ có th cho phép trong ng c nh này, b n ph i c u hình ng d ng c a b n ch pể ể ữ ả ạ ả ấ ứ ụ ủ ạ ấ nh n th xác th c đ c truy n trong chu i truy v n, nh ví d sau:ậ ẻ ự ượ ề ỗ ấ ư ụ

Listing 2.4 web4.configMã:<configuration> <system.web> <authentication mode="Forms" > <forms enableCrossAppRedirects="true" /> </authentication> <machineKey decryption="AES" validation="SHA1" decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DACA53DBB3C3E0AD2" validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DAB98B8EFD19C711337E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E44B2247792265" /> </system.web></configuration>

N u b n c u hình nh Listing 2.4 cho phép hai ng d ng khác nhau đ nh v trên cácế ạ ấ ư ứ ụ ị ị domain khác nhau, hai ng d ng khác nhau có th chia s th ki m ch ng khác nhau.ứ ụ ể ẻ ẻ ể ứKhi b n liên k t ho c chuy n san trang t m t trang khác b n ph i truy n th ki mạ ế ặ ể ừ ộ ạ ả ề ẻ ể ch ng này trong chu i tham s truy v nứ ỗ ố ấ

Listing 2.5 QueryStringAuthenticate.aspxMã:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QueryStringAuthenticate.aspx.cs" Inherits="QueryStringAuthenticate" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> void Page_Load() { string cookieName = FormsAuthentication.FormsCookieName; string cookieValue = FormsAuthentication.GetAuthCookie(User.Identity.Name, false).Value; lnkOtherDomain.NavigateUrl += String.Format("?{0}={1}", cookieName, cookieValue); }</script>

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <div> <asp:HyperLink id="lnkOtherDomain" Text="liên k t t i Domain khác"ế ớ NavigateUrl="http://www.OtherDomain.com/Secret.aspx" Runat="server" /> </div> </form></body></html>

2.1.5 S d ng L p FormsAuthenticationử ụ ớGiao ti p l p trình ng d ng chính cho t ng tác v i ki m ch ng Forms là l pế ậ ứ ụ ươ ớ ể ứ ớ FormsAuthentication L p này h tr các thu c tinh sau:ớ ỗ ợ ộ• CookieDomain: Tr v domain k t h p v i cookie xác th cả ề ế ợ ớ ự• CookieMode: Tr v ki u xác th c cookieless. Có th là các giá tr : AutoDetect,ả ề ể ự ể ị UseCookies, UseDeviceProfile, and UseUri.• CookiesSupported: Tr v đúng khi trình duy t h tr cookie và xác th c Forms đ cả ề ệ ỗ ợ ự ượ c u hình đ s d ng cookies.ấ ể ử ụ• DefaultUrl: Tr v URL c a trang mà ng i s d ng đ c chuy n t i sau khi đ cả ề ủ ườ ử ụ ượ ể ớ ượ ki m ch ng.ể ứ• EnableCrossAppRedirects: Tr v true khi th ki m ch ng có th g b t chu i truyả ề ẻ ể ứ ể ỡ ỏ ừ ỗ v nấ• FormsCookieName: tr v tên c a cookie xác th cả ề ủ ự• FormsCookiePath: Tr v đ ng d n k t h p v i cookie ki m ch ng.ả ề ườ ẫ ế ợ ớ ể ứ• LoginUrl: tr v URL c a trang mà ng i s d ng đ c chuy n t i khi s đ c ki mả ề ủ ườ ử ụ ượ ể ớ ẽ ượ ể ch ng.ứ• RequireSSL: Tr v đúng khi cookie ki m ch ng ph i đ c truy n thông v i SSL.ả ề ể ứ ả ượ ề ớ• SlidingExpiration: Tr v True khi cookie ki m ch ng s d ng chính sách tr t quáả ề ể ứ ử ụ ượ h n.ạCác thu c tính này tr v các thi t l p c u hình trong file web.configộ ả ề ế ậ ấ

L p FormsAuthentication h tr các ph ng th c sau:ớ ỗ ợ ươ ứ• Authenticate: Cho phép b n ki m tra l i UserName và Password d a vào m t danhạ ể ạ ự ộ sách UserName và Password đ c l u tr trong file web.config.ượ ư ữ• Decrypt: cho phép b n gi i mã m t cookie xác th cạ ả ộ ự• GetAuthCookie: Cho phép b n l y thông tin cookie xác th c.ạ ấ ự• GetRedirectUrl: Cho phép b n l y thông tin đ ng d n trang ban đ u gây ra chuy nạ ấ ườ ẫ ầ ể t i trang Login.aspx.ớ• HashPasswordForStoringInConfigFile: Cho phép b n l u tr m t m t kh u mà nó cóạ ư ữ ộ ậ ẩ th đ c l u tr trong file web.config.ể ượ ư ữ• RedirectFromLoginPage: Cho phép b n chuy n ng i s d ng quay tr l i trang banạ ể ườ ử ụ ở ạ đ u đ c yêu c u tr c khi ng i s d ng đ c chuy n t i trang Login.aspx.ầ ượ ầ ướ ườ ử ụ ượ ể ớ• RedirectToLoginPage: cho phép chuy n ng i s d ng t i trang Login.aspxể ườ ử ụ ớ• RenewTicketIfOld: Cho phép b n c p nh t th i gian h t h n c a cookie ki m ch ng.ạ ậ ậ ờ ế ạ ủ ể ứ• SetAuthCookie: Cho phép b n t o và đ a ra m t cookie ki m ch ng.ạ ạ ư ộ ể ứ• SignOut: Cho phép b n g b m t cookie ki m ch ng và đăng xu t ng i s d ng.ạ ỡ ỏ ộ ể ứ ấ ườ ử ụB n có th s d ng các ph ng th c và thu c tính c a l p FormsAuthentication đ xâyạ ể ử ụ ươ ứ ộ ủ ớ ể d ng ng i đăng ký s d ng và h th ng ki m ch ng ngoài vi c s d ng ASP.NETự ườ ử ụ ệ ố ể ứ ệ ử ụ Menbership. Ví d Listing 2.6 ch a đ ng m t danh sách tên s d ng và m t kh u ụ ứ ự ộ ử ụ ậ ẩ

Listing 2.6 web6.configMã:<configuration> <system.web> <authentication mode="Forms"> <forms> <credentials passwordFormat="Clear"> <user name="Bill" password="secret" /> <user name="Jane" password="secret" /> <user name="Fred" password="secret" /> </credentials> </forms> </authentication> </system.web></configuration>

Listing 2.6 ch a đ ng thành ph n forms mà ch a đ ng thành ph n credentials.ứ ự ầ ứ ự ầ credentials bao g m m t danh sách UserName và Password.ồ ộChú ý r ng thành ph n credentials ch a m t thu c tính PasswordFormatmà đ c thi tằ ầ ứ ộ ộ ượ ế l p v i giá tr Clear, N u b n thích l u tr m t kh u trong Text h n b n có th l u trậ ớ ị ế ạ ư ữ ậ ẩ ơ ạ ể ư ữ m t kh u trong các giá tr hash, V i con đ ng đó thì b t c ai trên webserver không thậ ẩ ị ớ ườ ấ ứ ể nhìn th y m t kh u c a ng i khác. Tr ng h p 2 giá tr c a PasswordFormat có th làấ ậ ẩ ủ ườ ườ ợ ị ủ ể MD5 và SHA1.

Listing 2.7 FormsLogin.aspxMã:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FormsLogin.aspx.cs" Inherits="FormsLogin" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void btnLogin_Click(object sender, EventArgs e) { if (FormsAuthentication.Authenticate(txtUserName.Text,txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked); else lblError.Text = "Invalid user name/password"; }</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Đăng nh p h th ng</title>ậ ệ ố</head><body> <form id="form1" runat="server"> <div> <asp:Label id="lblError" EnableViewState="false" ForeColor="Red" Runat="server" /> <br /><br /> <asp:Label id="lblUserName" Text="User Name:" AssociatedControlID="txtUserName" Runat="server" /> <br /> <asp:TextBox id="txtUserName" Runat="server" /> <br /><br /> <asp:Label id="lblPassword" Text="Password:" AssociatedControlID="txtPassword" Runat="server" /> <br /> <asp:TextBox id="txtPassword" TextMode="Password" Runat="server" /> <br /><br /> <asp:CheckBox id="chkRememberMe" Text="Remember Me" Runat="server" /> <br /><br /> <asp:Button id="btnLogin" Text="Login" OnClick="btnLogin_Click" Runat="server" /> </div> </form></body></html>

Khi b n nh n vào nút Button Login, hàm btnLogin_Click() đ c th c thi và ph ngạ ấ ượ ự ươ th c FormsAuthentication.Authenticate() đ c s d ng đ ki m tra tên s d ng và m tứ ượ ử ụ ể ể ử ụ ậ

kh u nh p trong Textbox có trong fike web.config không. N u ng i s d ng xác th cẩ ậ ế ườ ử ụ ự thành công thì ph ng th c FormsAuthentication.RedirectFromLoginPage() đ c g i.ươ ứ ượ ọPh ng th c RedirectFromLoginPage() làm hai vi c: thêm m t cookie xác th c vàoươ ứ ệ ộ ự trình duy t c a ng i s d ng và chuy n ng i s d ng t i trang đ u tiên b chuy nệ ủ ườ ử ụ ể ươ ử ụ ớ ầ ị ể sang trang Login.aspx. N u ng i s d ng yêu c u tr c ti p trang Login.aspx thì nó sế ườ ử ụ ầ ự ế ẽ chuy n v trang Default.aspx.ể ềTham s th 2 truy n t i ph ng th c RedirectFromLoginPage() cho bi t có b n cóố ứ ề ớ ươ ứ ế ạ mu n s d ng m t session hay m t persistent cookie hay không. N u b n t o m tố ử ụ ộ ộ ế ạ ạ ộ persistent cookie thì b n không c n ph i đăng nh p trang web khi b n tr l i trong m tạ ầ ả ậ ạ ở ạ ộ th i gian sau đó.ờ2.1.6 S d ng l p Userử ụ ớB n có th s d ng thu c tính Page.User ho c HttpContext.User đ l y thông tin vạ ể ử ụ ộ ặ ể ấ ề ng i s d ng hi n t i. Thu c tính Page.User đ a ra m t đ i t ng Principal mà h trườ ử ụ ệ ạ ộ ư ộ ố ượ ỗ ợ ph ng th c sau:ươ ứIsInRole: Cho phép ki m tra ng i s d ng có ph i là m t thành viên c a Role riêngể ườ ử ụ ả ộ ủ hay không. Ví d Khi Windows Authentication đ c cho phép, b n có th s d ng ph ng th cụ ượ ạ ể ử ụ ươ ứ IsInRole đ ki m tra ng i s d ng có ph i là thành viên c a nhóm riêng trong MSể ể ườ ử ụ ả ủ Windows nh là nhóm BUILTIN\Administrators hay không?ưif (User.IsInRole(“BUILTIN\Administrators”)){// th c hi n công vi c c a qu n tr viên h đi u hànhự ệ ệ ủ ả ị ệ ề}Đ i t ng Principal ch bao g m m t thu c tính Identity cho phép b n l y thông tin vố ượ ỉ ồ ộ ộ ạ ấ ề đ c tính c a ng i s d ng hi n t i. Đ i t ng Indentity h tr ba thu c tính sau:ặ ủ ườ ử ụ ệ ạ ố ượ ỗ ợ ộAuthenticationType: cho phép b n xác đ nh ng i s d ng đ c ki m ch ng nh thạ ị ườ ử ụ ượ ể ứ ư ế nào có th là các giá tr : Forms, Basic, và NTLM.ể ịIsAuthenticated: cho phép b n xác đ nh ng i s d ng có đ c ki m ch ng hay không.ạ ị ưở ử ụ ượ ể ứName: cho phép l y thông tin tên c a ng i s d ng.ấ ủ ườ ử ụ