ASP有內建一套會員管理機制
只是有時候要自訂就沒這麼方便
可以透過覆寫MembershipProvider達到目的
1. 首先在 web.config 設定登入採用 Forms 模式
然後設定預設的頁面及登入頁及禁止非會員登入頁面
[code lang="xml" title="web.config"]
<system.web>
<authentication mode="Forms">
<forms name="PageLogin" defaultUrl="Default.aspx" loginUrl="Login.aspx" timeout="30" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
[/code]
2. 新增一個類別Inherits MembershipProvider
[code lang="vbnet" title="App_CodeMyMembershipProvider.vb"]Public Class MyMembershipProvider
Inherits MembershipProvider
Public Overrides Property ApplicationName As String
Get
Return Nothing
End Get
Set(value As String)
End Set
End Property
Public Overrides Function ChangePassword(username As String, oldPassword As String, newPassword As String) As Boolean
Return Nothing
End Function
Public Overrides Function ChangePasswordQuestionAndAnswer(username As String, password As String, newPasswordQuestion As String, newPasswordAnswer As String) As Boolean
Return Nothing
End Function
Public Overrides Function CreateUser(username As String, password As String, email As String, passwordQuestion As String, passwordAnswer As String, isApproved As Boolean, providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser
Return Nothing
End Function
Public Overrides Function DeleteUser(username As String, deleteAllRelatedData As Boolean) As Boolean
Return Nothing
End Function
Public Overrides ReadOnly Property EnablePasswordReset As Boolean
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property EnablePasswordRetrieval As Boolean
Get
Return Nothing
End Get
End Property
Public Overrides Function FindUsersByEmail(emailToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection
Return Nothing
End Function
Public Overrides Function FindUsersByName(usernameToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection
Return Nothing
End Function
Public Overrides Function GetAllUsers(pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection
Return Nothing
End Function
Public Overrides Function GetNumberOfUsersOnline() As Integer
Return Nothing
End Function
Public Overrides Function GetPassword(username As String, answer As String) As String
Return Nothing
End Function
Public Overloads Overrides Function GetUser(providerUserKey As Object, userIsOnline As Boolean) As System.Web.Security.MembershipUser
Return Nothing
End Function
Public Overloads Overrides Function GetUser(username As String, userIsOnline As Boolean) As System.Web.Security.MembershipUser
Return Nothing
End Function
Public Overrides Function GetUserNameByEmail(email As String) As String
Return Nothing
End Function
Public Overrides ReadOnly Property MaxInvalidPasswordAttempts As Integer
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters As Integer
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property MinRequiredPasswordLength As Integer
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property PasswordAttemptWindow As Integer
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property PasswordFormat As System.Web.Security.MembershipPasswordFormat
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property PasswordStrengthRegularExpression As String
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property RequiresQuestionAndAnswer As Boolean
Get
Return Nothing
End Get
End Property
Public Overrides ReadOnly Property RequiresUniqueEmail As Boolean
Get
Return Nothing
End Get
End Property
Public Overrides Function ResetPassword(username As String, answer As String) As String
Return Nothing
End Function
Public Overrides Function UnlockUser(userName As String) As Boolean
Return Nothing
End Function
Public Overrides Sub UpdateUser(user As System.Web.Security.MembershipUser)
End Sub
Public Overrides Function ValidateUser(username As String, password As String) As Boolean
' 實做登入帳號認證
If username = "ga009900" Then
Return True
Else
Return False
End If
End Function
End Class[/code]
3. 在web.config設定MembershipProvider
[code lang="xml" title="web.config"]
<system.web>
<membership defaultProvider="MyMembershipProvider">
<providers>
<add name="MyMembershipProvider" type="MyMembershipProvider"/>
</providers>
</membership>
</system.web>[/code]
4. 新增Login.aspx頁面
[code lang="vbnet" title="login.aspx"]
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Login.aspx.vb" 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">
<div>
<asp:Login ID="Login1" runat="server">
</asp:Login>
</div>
</form>
</body>
</html>[/code]
[code lang="vbnet" title="login.aspx.vb"]
Partial Class Login
Inherits System.Web.UI.Page
Protected Sub Login1_Authenticate(sender As Object, e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
If Membership.ValidateUser(Login1.UserName, Login1.Password) Then
e.Authenticated = True
Else
e.Authenticated = False
End If
End Sub
End Class[/code]