轉載出自:http://www.cnblogs.com/xlb2000/archive/2010/07/31/1788120.html
前面說了不少關於membership的內容,感受內容有點凌亂,內容都是一個個知識點,下面咱們經過一個小的項目,來把全部的相關內容串一下。html
首先描述一下需求:web
咱們要作一個最簡單的網站。有三類用戶:匿名用戶,員工,管理員,網站結構以下:sql
admin目錄下的頁面只容許admin角色的用戶訪問,employee目錄下的頁面只容許emp角色的用戶訪問。Default.aspx容許全部用戶訪問。Login.aspx實現登錄功能,regUser.aspx實現註冊用戶功能。數據庫
1.首先咱們新建一個網站瀏覽器
2.進入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx這個目錄下,找到aspnet_regsql.exe,運行,並一路下一步,獲得aspnetdb數據庫cookie
3.打開網站,打開web.config文件,配置membership:app
<membership defaultProvider="mySqlMembershipProvider">
<providers>
<add name="mySqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="TestMembership"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
而後繼續添加鏈接字符串:less
<
connectionStrings
>
<
add
name
="ConnectionString"
connectionString
="server=.;uid=sa;pwd=sa;database=aspnetdb"
/>
</
connectionStrings
>
4.接着配置roleManager:ide
<
roleManager
enabled
="true"
defaultProvider
="myAspNetSqlRoleProvider"
>
<
providers
>
<
add
name
="myAspNetSqlRoleProvider"
connectionStringName
="ConnectionString"
applicationName
="TestMembership"
type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</
providers
>
</
roleManager
>
5.接着在項目中添加兩個頁面,一個首頁Default.aspx一個登錄頁面Default.aspx,隨後繼續添加forms身份驗證的配置:post
<
authentication
mode
="Forms"
>
<
forms
loginUrl
="Login.aspx"
protection
="All"
timeout
="30"
name
=".ASPXAUTH"
path
="/"
slidingExpiration
="true"
defaultUrl
="Default.aspx"
cookieless
="UseDeviceProfile"
/>
</
authentication
>
如今須要添加兩種角色employee、admin,添加角色的方法很簡單方法有不少,咱們介紹最簡單的一種:新建一個頁面,在這個頁面的page_load事件當中加入以下代碼:
protected
void
Page_Load(
object
sender, EventArgs e)
{
Roles.CreateRole(
"
admin
"
);
Roles.CreateRole(
"
employee
"
);
}
瀏覽一下這個頁面就添加了這倆角色。
添加完角色,就該實現註冊用戶功能了。
regUser頁面代碼以下:
<
%@ Page
Language
="C#"
AutoEventWireup
="true"
CodeFile
="regUser.aspx.cs"
Inherits
="regUser"
%
>
<!
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
>
無標題頁
</
title
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
table
border
="0"
cellpadding
="0"
cellspacing
="0"
>
<
tr
>
<
td
>
用戶名:
</
td
>
<
td
><
asp:TextBox
runat
="server"
ID
="txtName"
></
asp:TextBox
></
td
>
</
tr
>
<
tr
>
<
td
>
密碼:
</
td
>
<
td
><
asp:TextBox
runat
="server"
ID
="txtPwd"
TextMode
="Password"
></
asp:TextBox
></
td
>
</
tr
>
<
tr
>
<
td
>
郵箱:
</
td
>
<
td
><
asp:TextBox
runat
="server"
ID
="txtEmail"
></
asp:TextBox
></
td
>
</
tr
>
<
tr
>
<
td
colspan
="2"
><
asp:Button
runat
="server"
ID
="btnReg"
Text
="註冊"
onclick
="btnReg_Click"
/></
td
>
</
tr
>
</
table
>
</
form
>
</
body
>
</
html
>
這是regUser.aspx.cs文件中的代碼
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
public
partial
class
regUser : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e){}
protected
void
btnReg_Click(
object
sender, EventArgs e)
{
/*
這裏僅僅是爲了演示Membership功能,因此驗證、錯誤捕獲等在此省略
* 因爲咱們在web.config中將requiresQuestionAndAnswer設爲false
* 因此在這裏只須要調用3個參數的重載便可
*
*/
Membership.CreateUser(txtName.Text, txtPwd.Text, txtEmail.Text);
//
將剛剛註冊的用戶添加Employee角色
Roles.AddUserToRole(txtName.Text,
"
employee
"
);
//
註冊成功,將用戶跳轉到默認頁面
//
所謂默認頁面,就是在前面配置時forms節點下defaultUrl指定的頁面
FormsAuthentication.RedirectFromLoginPage(txtName.Text,
false
);
}
}
ok,註冊功能已經差很少了,如今咱們開始完成登陸頁面。
打開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
>
無標題頁
</
title
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
table
border
="0"
cellpadding
="0"
cellspacing
="0"
>
<
tr
>
<
td
>
用戶名:
</
td
>
<
td
><
asp:TextBox
runat
="server"
ID
="txtName"
></
asp:TextBox
></
td
>
</
tr
>
<
tr
>
<
td
>
密碼:
</
td
>
<
td
><
asp:TextBox
runat
="server"
ID
="txtPwd"
TextMode
="Password"
></
asp:TextBox
></
td
>
</
tr
>
<
tr
>
<
td
colspan
="2"
><
asp:Button
runat
="server"
Text
="登陸"
ID
="btnLogin"
onclick
="btnLogin_Click"
/></
td
>
</
tr
>
</
table
>
</
form
>
</
body
>
</
html
>
Login.aspx.cs代碼以下:
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
public
partial
class
Login : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e){ }
protected
void
btnLogin_Click(
object
sender, EventArgs e)
{
if
(Membership.ValidateUser(txtName.Text, txtPwd.Text))
{
//
登陸成功向瀏覽器寫入身份票據
FormsAuthentication.SetAuthCookie(txtName.Text,
false
);
//
跳轉回最初請求的url或是默認url
//
注:所謂最初請求的url是指:若是我未經登陸,
//
直接訪問admin/admin.aspx這個頁面,那麼將會跳轉到該登陸頁面
//
若是登陸成功,則此方法將會以登陸用戶的身份跳轉回
//
admin/admin.aspx頁面
FormsAuthentication.RedirectFromLoginPage(txtName.Text,
false
);
}
else
{
ClientScript.RegisterStartupScript(
this
.GetType(),
""
,
"
alert('用戶名或密碼錯誤!');
"
,
true
);
}
}
}
好了,註冊和登陸都已經完成了,剩下的任務就是配置訪問權限這一項了,其實很簡單:在admin和employee目錄下分別添加兩個web.config文件
admin目錄下的web.config內容以下:
<
configuration
>
<
appSettings
/>
<
connectionStrings
/>
<
system.web
>
<
authorization
>
<
allow
roles
="admin"
/>
<
deny
users
="*"
/>
<!--
*表明的是全部用戶
-->
</
authorization
>
</
system.web
>
</
configuration
>
表示全部具備admin角色的用戶容許訪問,除此以外所有拒絕訪問。
employee目錄下的web.config內容以下:
<
configuration
>
<
appSettings
/>
<
connectionStrings
/>
<
system.web
>
<
authorization
>
<
allow
roles
="employee"
/>
<
deny
users
="*"
/>
</
authorization
>
</
system.web
>
</
configuration
>
同admin目錄下的配置,*是通配符,表明全部用戶,?表明全部匿名用戶
好了,到這裏,咱們實現的功能有:登陸,註冊,權限控制。一個網站所須要的功能基本上都已經實現了,項目有點簡單,可是功能齊全。通常來講80%的站點使用membership就足夠了。好了,本項目到此結束。