SlideShare a Scribd company logo
1 of 42
Download to read offline
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ạ ầ ử ệ ụ
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
• FailureText
Và 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.config
Mã:
<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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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="Admin@YourSite.com" />
</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à Normal
Subject: 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.config
Mã:
<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.config
Mã:
<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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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 LoginCreatedUser
Listing 1.15 CreateUserWizardPasswordConfirmation.aspx
Mã:
<%@ 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="Admin@YourSite.com"
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.htm
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>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.aspx
Mã:
<%@ 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="Admin@YourSite.com"
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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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="Admin@YourSite.com"
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.aspx
Mã:
<%@ 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.aspx
Mã:
<%@ 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="Admin@YourSite.com"
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.config
Mã:
<?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 Authentication
M 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 ... VllOKdQkRk
tOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-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:ườ ẫ
WINDOWSMicrosoft.NETFrameworkv2.0.50727CONFIGBrowsers
B 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.2
Mã:
<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.3
Mã:
<?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.config
Mã:
<configuration>
<system.web>
<authentication mode="Forms" >
<forms enableCrossAppRedirects="true" />
</authentication>
<machineKey decryption="AES" validation="SHA1"
decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DAC
A53DBB3C3E0AD2"
validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DA
B98B8EFD19C711337E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E
44B2247792265" />
</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.aspx
Mã:
<%@ 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.config
Mã:
<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.aspx
Mã:
<%@ 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 BUILTINAdministrators hay không?ư
if (User.IsInRole(“BUILTINAdministrators”))
{
// 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 Authentication
M 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 ... VllOKdQkRk
tOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-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:ườ ẫ
WINDOWSMicrosoft.NETFrameworkv2.0.50727CONFIGBrowsers
B 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.2
Mã:
<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.3
Mã:
<?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.config
Mã:
<configuration>
<system.web>
<authentication mode="Forms" >
<forms enableCrossAppRedirects="true" />
</authentication>
<machineKey decryption="AES" validation="SHA1"
decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DAC
A53DBB3C3E0AD2"
validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DA
B98B8EFD19C711337E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E
44B2247792265" />
</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.aspx
Mã:
<%@ 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.config
Mã:
<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.aspx
Mã:
<%@ 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 BUILTINAdministrators hay không?ư
if (User.IsInRole(“BUILTINAdministrators”))
{
// 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.ấ ủ ườ ử ụ

More Related Content

Viewers also liked

Materi ajar p kn kelas i
Materi ajar p kn kelas iMateri ajar p kn kelas i
Materi ajar p kn kelas ilinamayasari03
 
2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...
2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...
2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...Symposium
 
Boosting Solar Efficiency
Boosting Solar EfficiencyBoosting Solar Efficiency
Boosting Solar EfficiencyIJERA Editor
 
5. Δικαιωματα των ηλικιωμενων
5. Δικαιωματα των ηλικιωμενων5. Δικαιωματα των ηλικιωμενων
5. Δικαιωματα των ηλικιωμενωνdimkom
 
1001 cach tiep can ban gai
1001 cach tiep can ban gai1001 cach tiep can ban gai
1001 cach tiep can ban gaiPandaVU
 
ДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина Баранова
ДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина БарановаДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина Баранова
ДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина БарановаPartnerSB
 
Быстрый старт.последняя
Быстрый старт.последняяБыстрый старт.последняя
Быстрый старт.последняяPartnerSB
 
3.內湖花市
3.內湖花市3.內湖花市
3.內湖花市Curves Wen
 

Viewers also liked (12)

Materi ajar p kn kelas i
Materi ajar p kn kelas iMateri ajar p kn kelas i
Materi ajar p kn kelas i
 
2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...
2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...
2015 Broken Hill Resources Investment Symposium - Altech Chemicals (ASX:ATC) ...
 
Boosting Solar Efficiency
Boosting Solar EfficiencyBoosting Solar Efficiency
Boosting Solar Efficiency
 
Perjalanan Bisnis
Perjalanan BisnisPerjalanan Bisnis
Perjalanan Bisnis
 
5. Δικαιωματα των ηλικιωμενων
5. Δικαιωματα των ηλικιωμενων5. Δικαιωματα των ηλικιωμενων
5. Δικαιωματα των ηλικιωμενων
 
1001 cach tiep can ban gai
1001 cach tiep can ban gai1001 cach tiep can ban gai
1001 cach tiep can ban gai
 
Why Blog?
Why Blog?Why Blog?
Why Blog?
 
ДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина Баранова
ДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина БарановаДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина Баранова
ДАЛИОН:ТРЕНД опыт внедрения (2015) - Екатерина Баранова
 
Быстрый старт.последняя
Быстрый старт.последняяБыстрый старт.последняя
Быстрый старт.последняя
 
Project 3
Project 3Project 3
Project 3
 
3.內湖花市
3.內湖花市3.內湖花市
3.內湖花市
 
Particula de dios
Particula de diosParticula de dios
Particula de dios
 

Similar to Idoc.vn giao trinh-aspnet-nang-cao

Excel Auto Cad Vba Automation
Excel Auto Cad Vba AutomationExcel Auto Cad Vba Automation
Excel Auto Cad Vba Automationlsxinh
 
Tim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongTim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongVu Trung Kien
 
Xây dựng website thương mại điện tử
Xây dựng website thương mại điện tửXây dựng website thương mại điện tử
Xây dựng website thương mại điện tửCat Van Khoi
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHPNIIT - ICT Hà Nội
 
Tự học JavaScript
Tự học JavaScriptTự học JavaScript
Tự học JavaScriptÁnh Nguyễn
 
Tu hoc javascript
Tu hoc javascriptTu hoc javascript
Tu hoc javascriptzingoncmu2
 
Giao trinh java_script[1]
Giao trinh java_script[1]Giao trinh java_script[1]
Giao trinh java_script[1]Tan Le
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
Baocao nguyenanhcuong
Baocao nguyenanhcuongBaocao nguyenanhcuong
Baocao nguyenanhcuongCuong Nguyen
 
Bài 4: JSP Cơ Bản - Lập Trình Mạng Nâng Cao
Bài 4: JSP Cơ Bản - Lập Trình Mạng Nâng CaoBài 4: JSP Cơ Bản - Lập Trình Mạng Nâng Cao
Bài 4: JSP Cơ Bản - Lập Trình Mạng Nâng CaoTuan Nguyen
 
Sql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comSql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comphanleson
 
Bai thuc-hanh-asp-net1-2
Bai thuc-hanh-asp-net1-2Bai thuc-hanh-asp-net1-2
Bai thuc-hanh-asp-net1-2Hoang Nguyen
 
Bao cao wesite bán giày.docx
Bao cao wesite bán giày.docxBao cao wesite bán giày.docx
Bao cao wesite bán giày.docxssuser11005a
 
Javascript tong-hop a-z
Javascript tong-hop a-zJavascript tong-hop a-z
Javascript tong-hop a-zManhh Nguyễn
 

Similar to Idoc.vn giao trinh-aspnet-nang-cao (20)

Asp control
Asp controlAsp control
Asp control
 
Excel Auto Cad Vba Automation
Excel Auto Cad Vba AutomationExcel Auto Cad Vba Automation
Excel Auto Cad Vba Automation
 
Tim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongTim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chong
 
Xây dựng website thương mại điện tử
Xây dựng website thương mại điện tửXây dựng website thương mại điện tử
Xây dựng website thương mại điện tử
 
Bai th08 php voi csdl
Bai th08 php voi csdlBai th08 php voi csdl
Bai th08 php voi csdl
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
 
Giáo trình asp.net với c sharp
Giáo trình asp.net với c sharpGiáo trình asp.net với c sharp
Giáo trình asp.net với c sharp
 
Tự học JavaScript
Tự học JavaScriptTự học JavaScript
Tự học JavaScript
 
Tu hoc javascript
Tu hoc javascriptTu hoc javascript
Tu hoc javascript
 
Giao trinh java_script[1]
Giao trinh java_script[1]Giao trinh java_script[1]
Giao trinh java_script[1]
 
Yii
YiiYii
Yii
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Baocao nguyenanhcuong
Baocao nguyenanhcuongBaocao nguyenanhcuong
Baocao nguyenanhcuong
 
Bài 4: JSP Cơ Bản - Lập Trình Mạng Nâng Cao
Bài 4: JSP Cơ Bản - Lập Trình Mạng Nâng CaoBài 4: JSP Cơ Bản - Lập Trình Mạng Nâng Cao
Bài 4: JSP Cơ Bản - Lập Trình Mạng Nâng Cao
 
Sql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comSql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.com
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
 
Bai thuc-hanh-asp-net1-2
Bai thuc-hanh-asp-net1-2Bai thuc-hanh-asp-net1-2
Bai thuc-hanh-asp-net1-2
 
Bao cao wesite bán giày.docx
Bao cao wesite bán giày.docxBao cao wesite bán giày.docx
Bao cao wesite bán giày.docx
 
Javascript tong-hop a-z
Javascript tong-hop a-zJavascript tong-hop a-z
Javascript tong-hop a-z
 
Thuc tap tuan 4
Thuc tap tuan 4Thuc tap tuan 4
Thuc tap tuan 4
 

Idoc.vn giao trinh-aspnet-nang-cao

  • 1. 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ạ ầ ử ệ ụ
  • 2. 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>
  • 3. </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>
  • 4. </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;
  • 5. 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ự ộ ể ớ ộ ỉ ị
  • 6. 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 {
  • 7. } </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 • FailureText Và 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
  • 8. 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.config Mã: <configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms"> <forms>
  • 9. <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.ớ
  • 10. Đ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.aspx Mã: <%@ 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"
  • 11. 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.aspx Mã: <%@ 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="Admin@YourSite.com" />
  • 12. </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à Normal Subject: 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.config Mã: <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.config Mã: <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ể ể ệ ố ớ ề ể ầ ế
  • 13. 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.aspx Mã: <%@ 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.
  • 14. 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.aspx Mã: <%@ 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ộ
  • 15. 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 LoginCreatedUser Listing 1.15 CreateUserWizardPasswordConfirmation.aspx Mã: <%@ 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="Admin@YourSite.com" BodyFileName="PasswordConfirmation.htm" IsBodyHtml="true" Subject="Registration Confirmation" /> </asp:CreateUserWizard> </div> </form> </body> </html>
  • 16. Đi u khi n CreateUserWizard g i th ch a đ ng nh trong Listing 1.16ề ể ử ư ứ ự ư Listing 1.16 PasswordConfirmation.htm 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>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.aspx Mã: <%@ 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
  • 17. 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="Admin@YourSite.com" 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.aspx Mã: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConfirmCode.aspx.cs" Inherits="ConfirmCode" %> <script runat="server">
  • 18. 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:"ậ
  • 19. 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.aspx Mã: <%@ 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.ị ộ
  • 20. 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.aspx Mã: <%@ 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.aspx Mã: <%@ 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">
  • 21. <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"
  • 22. 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.aspx Mã: <%@ 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="Admin@YourSite.com" 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%>,
  • 23. 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.aspx Mã: <%@ 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"
  • 24. 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.aspx Mã: <%@ 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
  • 25. { 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="Admin@YourSite.com" 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ả ậ ả ờ ậ ạ ử ụ ố ậ ẩ ẽ
  • 26. đ 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.config Mã: <?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.ậ ẩ ủ ạ ẽ ượ ử
  • 27. 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 Authentication M 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.ủ ề ị ệ ị ườ ử ụ
  • 28. 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" >
  • 29. <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 ... VllOKdQkRk tOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-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:ườ ẫ WINDOWSMicrosoft.NETFrameworkv2.0.50727CONFIGBrowsers B 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.2 Mã: <configuration> <system.web> <authentication mode="Forms" > <forms cookieless="AutoDetect"></forms> </authentication>
  • 30. </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.3 Mã: <?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.config Mã: <configuration> <system.web> <authentication mode="Forms" > <forms enableCrossAppRedirects="true" /> </authentication> <machineKey decryption="AES" validation="SHA1" decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DAC A53DBB3C3E0AD2"
  • 31. validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DA B98B8EFD19C711337E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E 44B2247792265" /> </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.aspx Mã: <%@ 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ế ậ ứ ụ ươ ớ ể ứ ớ
  • 32. 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.config Mã: <configuration> <system.web> <authentication mode="Forms"> <forms> <credentials passwordFormat="Clear"> <user name="Bill" password="secret" /> <user name="Jane" password="secret" />
  • 33. <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.aspx Mã: <%@ 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" />
  • 34. <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 BUILTINAdministrators hay không?ư if (User.IsInRole(“BUILTINAdministrators”)) { // 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.ể ị
  • 35. 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 Authentication M 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ạ ỉ ị ượ ế ợ ớ ể ứ ị
  • 36. 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:ỉ ệ ố ư
  • 37. http://localhost:2500/Original/(F(WfAne ... VllOKdQkRk tOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-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:ườ ẫ WINDOWSMicrosoft.NETFrameworkv2.0.50727CONFIGBrowsers B 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.2 Mã: <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.3 Mã: <?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings/> <system.web> <authentication mode="Forms" > <forms slidingExpiration="false" timeout="1" />
  • 38. </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.config Mã: <configuration> <system.web> <authentication mode="Forms" > <forms enableCrossAppRedirects="true" /> </authentication> <machineKey decryption="AES" validation="SHA1" decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DAC A53DBB3C3E0AD2" validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DA B98B8EFD19C711337E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E 44B2247792265" /> </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.aspx Mã: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="QueryStringAuthenticate.aspx.cs" Inherits="QueryStringAuthenticate" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  • 39. "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ộ ả ề ế ậ ấ
  • 40. 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.config Mã: <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.aspx Mã:
  • 41. <%@ 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ứ ượ ử ụ ể ể ử ụ ậ
  • 42. 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 BUILTINAdministrators hay không?ư if (User.IsInRole(“BUILTINAdministrators”)) { // 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.ấ ủ ườ ử ụ