首先我們來看看微軟自帶的membership:
我們打開系統下aspnet_regsql.exe 地址一般位於:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 如果沒問題一般都是在這個目錄下面如果framework裡面有多個版本可以選擇V2.0以上版本即可
我裝的window7打開的是framework v4.0 圖片如下:

我們點擊下一步:
默認下一步:

這一步我們選擇登錄方式然後選擇數據庫下一步

我選中了agebook 數據 然後我用sql server服務管理器打開看看是不是自動給我們生成了一些表。自帶的還是不少表 但是我們為了要使用自己的會員表所以只是給大家看看了 我個人認為自帶的不好用。
我們要自定義Membership類所以還是自己定義一個用戶表吧

這個表待會兒我們會用到:
首先我們用VS2012創建一個MVC應用程序

我們先看看MembershipProvider這個系統自帶的方法
using System;
using System.Configuration.Provider;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Web.Configuration;
namespace System.Web.Security
{
// 摘要:
// 定義 ASP.NET 為使用自定義成員資格提供程序提供成員資格服務而實現的協定。
[TypeForwardedFrom("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public abstract class MembershipProvider : ProviderBase
{
// 摘要:
// 初始化 System.Web.Security.MembershipProvider 類的新實例。
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
protected MembershipProvider();
// 摘要:
// 使用自定義成員資格提供程序的應用程序的名稱。
//
// 返回結果:
// 使用自定義成員資格提供程序的應用程序的名稱。
public abstract string ApplicationName { get; set; }
//
// 摘要:
// 指示成員資格提供程序是否配置為允許用戶重置其密碼。
//
// 返回結果:
// 如果成員資格提供程序支持密碼重置,則為 true;否則為 false。默認值為 true。
public abstract bool EnablePasswordReset { get; }
//
// 摘要:
// 指示成員資格提供程序是否配置為允許用戶檢索其密碼。
//
// 返回結果:
// 如果成員資格提供程序配置為支持密碼檢索,則為 true,否則為 false。默認值為 false。
public abstract bool EnablePasswordRetrieval { get; }
//
// 摘要:
// 獲取鎖定成員資格用戶前允許的無效密碼或無效密碼提示問題答案嘗試次數。
//
// 返回結果:
// 鎖定成員資格用戶之前允許的無效密碼或無效密碼提示問題答案嘗試次數。
public abstract int MaxInvalidPasswordAttempts { get; }
//
// 摘要:
// 獲取有效密碼中必須包含的最少特殊字符數。
//
// 返回結果:
// 有效密碼中必須包含的最少特殊字符數。
public abstract int MinRequiredNonAlphanumericCharacters { get; }
//
// 摘要:
// 獲取密碼所要求的最小長度。
//
// 返回結果:
// 密碼所要求的最小長度。
public abstract int MinRequiredPasswordLength { get; }
//
// 摘要:
// 獲取在鎖定成員資格用戶之前允許的最大無效密碼或無效密碼提示問題答案嘗試次數的分鐘數。
//
// 返回結果:
// 在鎖定成員資格用戶之前允許的最大無效密碼或無效密碼提示問題答案嘗試次數的分鐘數。
public abstract int PasswordAttemptWindow { get; }
//
// 摘要:
// 獲取一個值,該值指示在成員資格數據存儲區中存儲密碼的格式。
//
// 返回結果:
// System.Web.Security.MembershipPasswordFormat 值之一,該值指示在數據存儲區中存儲密碼的格式。
public abstract MembershipPasswordFormat PasswordFormat { get; }
//
// 摘要:
// 獲取用於計算密碼的正則表達式。
//
// 返回結果:
// 用於計算密碼的正則表達式。
public abstract string PasswordStrengthRegularExpression { get; }
//
// 摘要:
// 獲取一個值,該值指示成員資格提供程序是否配置為要求用戶在進行密碼重置和檢索時回答密碼提示問題。
//
// 返回結果:
// 如果密碼重置和檢索需要提供密碼提示問題答案,則為 true;否則為 false。默認值為 true。
public abstract bool RequiresQuestionAndAnswer { get; }
//
// 摘要:
// 獲取一個值,指示成員資格提供程序是否配置為要求每個用戶名具有唯一的電子郵件地址。
//
// 返回結果:
// 如果成員資格提供程序要求唯一的電子郵件地址,則返回 true;否則返回 false。默認值為 true。
public abstract bool RequiresUniqueEmail { get; }
// 摘要:
// 在創建用戶、更改密碼或重置密碼時發生。
public event MembershipValidatePasswordEventHandler ValidatingPassword;
// 摘要:
// 處理更新成員資格用戶密碼的請求。
//
// 參數:
// username:
// 為其更新密碼的用戶。
//
// oldPassword:
// 指定的用戶的當前密碼。
//
// newPassword:
// 指定的用戶的新密碼。
//
// 返回結果:
// 如果密碼更新成功,則為 true;否則為 false。
public abstract bool ChangePassword(string username, string oldPassword, string newPassword);
//
// 摘要:
// 處理更新成員資格用戶的密碼提示問題和答案的請求。
//
// 參數:
// username:
// 要為其更改密碼提示問題和答案的用戶。
//
// password:
// 指定的用戶的密碼。
//
// newPasswordQuestion:
// 指定的用戶的新密碼提示問題。
//
// newPasswordAnswer:
// 指定的用戶的新密碼提示問題答案。
//
// 返回結果:
// 如果成功更新密碼提示問題和答案,則為 true;否則,為 false。
public abstract bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer);
//
// 摘要:
// 將新的成員資格用戶添加到數據源。
//
// 參數:
// username:
// 新用戶的用戶名。
//
// password:
// 新用戶的密碼。
//
// email:
// 新用戶的電子郵件地址。
//
// passwordQuestion:
// 新用戶的密碼提示問題。
//
// passwordAnswer:
// 新用戶的密碼提示問題答案。
//
// isApproved:
// 是否允許驗證新用戶。
//
// providerUserKey:
// 成員資格數據源中該用戶的唯一標識符。
//
// status:
// 一個 System.Web.Security.MembershipCreateStatus 枚舉值,指示是否已成功創建用戶。
//
// 返回結果:
// 一個用新創建的用戶的信息填充的 System.Web.Security.MembershipUser 對象。
public abstract MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);
//
// 摘要:
// 解密已加密的密碼。
//
// 參數:
// encodedPassword:
// 一個字節數組,包含要解密的加密密碼。
//
// 返回結果:
// 包含已解密密碼的字節數組。
//
// 異常:
// System.Configuration.Provider.ProviderException:
// 將 System.Web.Configuration.MachineKeySection.ValidationKey 屬性或 System.Web.Configuration.MachineKeySection.DecryptionKey
// 屬性設置為 AutoGenerate。
protected virtual byte[] DecryptPassword(byte[] encodedPassword);
//
// 摘要:
// 從成員資格數據源刪除一個用戶。
//
// 參數:
// username:
// 要刪除的用戶的名稱。
//
// deleteAllRelatedData:
// 如果為 true,則從數據庫中刪除與該用戶相關的數據;如果為 false,則將與該用戶相關的數據保留在數據庫。
//
// 返回結果:
// 如果用戶被成功刪除,則為 true;否則為 false。
public abstract bool DeleteUser(string username, bool deleteAllRelatedData);
//
// 摘要:
// 對密碼進行加密。
//
// 參數:
// password:
// 包含要加密的密碼的字節數組。
//
// 返回結果:
// 包含已加密的密碼的字節數組。
//
// 異常:
// System.Configuration.Provider.ProviderException:
// 將 System.Web.Configuration.MachineKeySection.ValidationKey 屬性或 System.Web.Configuration.MachineKeySection.DecryptionKey
// 屬性設置為 AutoGenerate。
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
protected virtual byte[] EncryptPassword(byte[] password);
//
// 摘要:
// 使用指定的密碼兼容性模式對指定密碼進行加密。
//
// 參數:
// password:
// 包含要加密的密碼的字節數組。
//
// legacyPasswordCompatibilityMode:
// 成員資格密碼兼容性模式。
//
// 返回結果:
// 包含已加密的密碼的字節數組。
protected virtual byte[] EncryptPassword(byte[] password, MembershipPasswordCompatibilityMode legacyPasswordCompatibilityMode);
//
// 摘要:
// 獲取一個成員資格用戶的集合,其中的電子郵件地址包含要匹配的指定電子郵件地址。
//
// 參數:
// emailToMatch:
// 要搜索的電子郵件地址。
//
// pageIndex:
// 要返回的結果頁的索引。pageIndex 從零開始。
//
// pageSize:
// 要返回的結果頁的大小。
//
// totalRecords:
// 匹配用戶的總數。
//
// 返回結果:
// 包含一頁 pageSizeSystem.Web.Security.MembershipUser 對象的 System.Web.Security.MembershipUserCollection
// 集合,這些對象從 pageIndex 指定的頁開始。
public abstract MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords);
//
// 摘要:
// 獲取一個成員資格用戶的集合,其中的用戶名包含要匹配的指定用戶名。
//
// 參數:
// usernameToMatch:
// 要搜索的用戶名。
//
// pageIndex:
// 要返回的結果頁的索引。pageIndex 從零開始。
//
// pageSize:
// 要返回的結果頁的大小。
//
// totalRecords:
// 匹配用戶的總數。
//
// 返回結果:
// 包含一頁 pageSizeSystem.Web.Security.MembershipUser 對象的 System.Web.Security.MembershipUserCollection
// 集合,這些對象從 pageIndex 指定的頁開始。
public abstract MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords);
//
// 摘要:
// 獲取數據源中的所有用戶的集合,並顯示在數據頁中。
//
// 參數:
// pageIndex:
// 要返回的結果頁的索引。pageIndex 從零開始。
//
// pageSize:
// 要返回的結果頁的大小。
//
// totalRecords:
// 匹配用戶的總數。
//
// 返回結果:
// 包含一頁 pageSizeSystem.Web.Security.MembershipUser 對象的 System.Web.Security.MembershipUserCollection
// 集合,這些對象從 pageIndex 指定的頁開始。
public abstract MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords);
//
// 摘要:
// 獲取當前訪問該應用程序的用戶數。
//
// 返回結果:
// 當前訪問該應用程序的用戶數。
public abstract int GetNumberOfUsersOnline();
//
// 摘要:
// 從數據源獲取指定用戶名所對應的密碼。
//
// 參數:
// username:
// 為其檢索密碼的用戶。
//
// answer:
// 用戶的密碼提示問題答案。
//
// 返回結果:
// 指定用戶名所對應的密碼。
public abstract string GetPassword(string username, string answer);
//
// 摘要:
// 根據成員資格用戶的唯一標識符從數據源獲取用戶信息。提供一個更新用戶最近一次活動的日期/時間戳的選項。
//
// 參數:
// providerUserKey:
// 要獲取其信息的成員資格用戶的唯一標識符。
//
// userIsOnline:
// 如果為 true,則更新用戶最近一次活動的日期/時間戳;如果為 false,則返回用戶信息,但不更新用戶最近一次活動的日期/時間戳。
//
// 返回結果:
// 用數據源中指定用戶的信息填充的 System.Web.Security.MembershipUser 對象。
public abstract MembershipUser GetUser(object providerUserKey, bool userIsOnline);
//
// 摘要:
// 從數據源獲取用戶的信息。提供一個更新用戶最近一次活動的日期/時間戳的選項。
//
// 參數:
// username:
// 要獲取其信息的用戶名。
//
// userIsOnline:
// 如果為 true,則更新用戶最近一次活動的日期/時間戳;如果為 false,則返回用戶信息,但不更新用戶最近一次活動的日期/時間戳。
//
// 返回結果:
// 用數據源中指定用戶的信息填充的 System.Web.Security.MembershipUser 對象。
public abstract MembershipUser GetUser(string username, bool userIsOnline);
//
// 摘要:
// 獲取與指定的電子郵件地址關聯的用戶名。
//
// 參數:
// email:
// 要搜索的電子郵件地址。
//
// 返回結果:
// 與指定的電子郵件地址關聯的用戶名。如果未找到匹配項,則返回 null。
public abstract string GetUserNameByEmail(string email);
//
// 摘要:
// 如果定義了事件處理程序,則引發 System.Web.Security.MembershipProvider.ValidatingPassword
// 事件。
//
// 參數:
// e:
// 傳遞給 System.Web.Security.MembershipProvider.ValidatingPassword 事件處理程序的 System.Web.Security.ValidatePasswordEventArgs。
protected virtual void OnValidatingPassword(ValidatePasswordEventArgs e);
//
// 摘要:
// 將用戶密碼重置為一個自動生成的新密碼。
//
// 參數:
// username:
// 為其重置密碼的用戶。
//
// answer:
// 指定的用戶的密碼提示問題答案。
//
// 返回結果:
// 指定的用戶的新密碼。
public abstract string ResetPassword(string username, string answer);
//
// 摘要:
// 清除鎖定,以便可以驗證該成員資格用戶。
//
// 參數:
// userName:
// 要清除其鎖定狀態的成員資格用戶。
//
// 返回結果:
// 如果成功取消成員資格用戶的鎖定,則為 true;否則為 false。
public abstract bool UnlockUser(string userName);
//
// 摘要:
// 更新數據源中有關用戶的信息。
//
// 參數:
// user:
// 一個 System.Web.Security.MembershipUser 對象,表示要更新的用戶及其更新信息。
public abstract void UpdateUser(MembershipUser user);
//
// 摘要:
// 驗證數據源中是否存在指定的用戶名和密碼。
//
// 參數:
// username:
// 要驗證的用戶的名稱。
//
// password:
// 指定的用戶的密碼。
//
// 返回結果:
// 如果指定的用戶名和密碼有效,則為 true;否則為 false。
public abstract bool ValidateUser(string username, string password);
}
}
有這麼多 方法 我們的寫它因為要自定義一個自己的Membership類如下: