ASP.NET 2.0 的 MySQL 提供程序实现套件
一篇关于实现 ASP.NET 2.0 成员资格、角色、站点地图和个性化功能的 MySQL 提供程序的文章
目录
引言
当我开始处理一个新的支持 AJAX 的网站时,我寻找 ASP.NET 2.0 成员资格提供程序的 MySQL 实现。令我惊讶的是,我什么也没找到。所以我决定自己实现。经过几天的断断续续的开发工作后,我发现我不仅实现了成员资格提供程序,还实现了角色提供程序、站点地图提供程序和个性化提供程序。
所有提供程序都继承自 Microsoft 的通用提供程序。
Using the Code
使用提供程序非常简单。
-
在您的 MySQL 服务器上创建一个新的数据库,例如
SimpleProviders
。 -
在新创建的数据库上执行以下 SQL 语句。
CREATE TABLE `personalization` ( `username` varchar(255) default NULL, `path` varchar(255) default NULL, `applicationname` varchar(255) default NULL, `personalizationblob` blob ); CREATE TABLE `profiles` ( `UniqueID` int(8) NOT NULL auto_increment, `Username` varchar(255) NOT NULL default '', `ApplicationName` varchar(255) NOT NULL default '', `IsAnonymous` tinyint(1) default '0', `LastActivityDate` datetime default NULL, `LastUpdatedDate` datetime default NULL, PRIMARY KEY (`UniqueID`), UNIQUE KEY `PKProfiles` (`Username`,`ApplicationName`), UNIQUE KEY `PKID` (`UniqueID`) ); CREATE TABLE `roles` ( `Rolename` varchar(255) NOT NULL default '', `ApplicationName` varchar(255) NOT NULL default '', PRIMARY KEY (`Rolename`,`ApplicationName`) ); CREATE TABLE `sitemap` ( `ID` int(11) NOT NULL auto_increment, `ApplicationName` varchar(255) NOT NULL default '', `Title` varchar(255) default NULL, `Description` text, `Url` text, `Roles` text, `Parent` int(11) default NULL, PRIMARY KEY (`ID`) ); CREATE TABLE `users` ( `PKID` varchar(255) NOT NULL default '', `Username` varchar(255) NOT NULL default '', `ApplicationName` varchar(255) NOT NULL default '', `Email` varchar(128) default NULL, `Comment` varchar(255) default NULL, `Password` varchar(128) NOT NULL default '', `FailedPasswordAttemptWindowStart` datetime default NULL, `PasswordQuestion` varchar(255) default NULL, `IsLockedOut` tinyint(1) default '0', `PasswordAnswer` varchar(255) default NULL, `FailedPasswordAnswerAttemptCount` int(8) default '0', `FailedPasswordAttemptCount` int(8) default '0', `IsApproved` tinyint(1) NOT NULL default '0', `FailedPasswordAnswerAttemptWindowStart` datetime default NULL, `LastActivityDate` datetime default NULL, `IsOnLine` tinyint(1) default '0', `CreationDate` datetime default NULL, `LastPasswordChangedDate` datetime default NULL, `LastLockedOutDate` datetime default NULL, `LastLoginDate` datetime default NULL, PRIMARY KEY (`PKID`), UNIQUE KEY `PKID` (`PKID`), KEY `PKID_2` (`PKID`), KEY `usr` (`Username`) ); CREATE TABLE `usersinroles` ( `Username` varchar(255) NOT NULL default '', `Rolename` varchar(255) NOT NULL default '', `ApplicationName` varchar(255) NOT NULL default '', PRIMARY KEY (`Username`,`Rolename`,`ApplicationName`) );
源代码 ZIP 文件中包含一个名为 DBStructure.sql 的 SQL 文件,其中包含上述代码。
-
打开 Visual Studio 并创建一个新的网站项目。
-
添加对 Simple.Providers.MySQL.dll 文件的引用。
-
对您的 web.config 文件进行以下更改
-
将连接字符串添加到您新创建的数据库的 connectionStrings 节中,例如
<add connectionstring="Driver={MySQL ODBC 3.51 Driver};server={Your Server IP};port={Your Server Port No.};option=3;database={New Database Name};uid={Your username};pwd={Your password}" name="SimpleProviderConnectionString" providername="System.Data.Odbc" />
。* 请使用您自己的值替换连接字符串中的
{Your Server IP}
、{Your Server Port No.}
、{New Database Name}
、{Your username}
和{Your password}
字段。 -
在
<system.web>
部分下添加以下内容<siteMap defaultProvider="siteMapProvider" enabled="true"> <providers> <clear /> <add name="siteMapProvider" type="Simple.Providers.MySQL.MysqlSiteMapProvider" connectionStringName="SimpleProviderConnectionString" applicationName="{Your App Name}" description="MySQL site map provider" securityTrimmingEnabled="true"/> </providers> </siteMap> <roleManager defaultProvider="roleProvider" enabled="true" cacheRolesInCookie="false" cookieName=".ASPROLES" cookieTimeout="7200" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"> <providers> <clear /> <add name="roleProvider" type="Simple.Providers.MySQL.MysqlRoleProvider" connectionStringName="SimpleProviderConnectionString" applicationName="{Your App Name}" description="MySQL role provider"/> </providers> </roleManager> <membership defaultProvider="membershipProvider" userIsOnlineTimeWindow="15"> <providers> <clear /> <add name="membershipProvider" type="Simple.Providers.MySQL.MysqlMembershipProvider" connectionStringName="SimpleProviderConnectionString" applicationName="{Your App Name}" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Encrypted" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" description="MySQL membership provider"/> </providers> </membership> <profile defaultProvider="profileProvider" automaticSaveEnabled="true"> <providers> <clear /> <add name="profileProvider" type="Simple.Providers.MySQL.MysqlProfileProvider" connectionStringName="SimpleProviderConnectionString" applicationName="{Your App Name}" description="MySQL Profile Provider"/> </providers> <properties> <clear /> <!-- Add any needed attributes for profiles here. eg. <add name="Theme" type="System.String" defaultValue="Default"/> --> </properties> </profile> <webParts> <personalization defaultProvider="personalizationProvider"> <providers> <clear /> <add name="personalizationProvider" type="Simple.Providers.MySQL. MysqlPersonalizationProvider" connectionStringName= "{Your Connection String Name}" applicationName=" {Your App Name}" description="MySQL Personalization Provider/> </providers> </personalization> </webParts> /* !!! Please replace the {Your App Name} instances with a valid application name. The application name should not contain any spaces or special characters. !!! */
-
-
现在一切都应该设置正确了。继续您的项目的其余部分,并确保使用上述提供程序提供的功能。
关注点
在开发提供程序套件时,我使用了 Microsoft MSDN 网站。有关更多信息,请访问...
历史
- 2007-04-25:文章的初始发布
- 2007-10-18:更新
UpdateUser
代码以启用LastActivityDate
功能