memberShip资料总结
来源:互联网 发布:sq识图软件 编辑:程序博客网 时间:2024/06/06 18:42
Membership使用总结
一.建立数据库aspnetDB
1. 在SQL2005正式版中使用ASPNETDB.MDF数据库
由于没有aspnetdb.mdf数据库,因此得先建立一个,这个可以通过aspnet_regsql.exe完成,该程序位于C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/下。#V_6Jr,T*QC‑W!Z
T
1、运行它之后会弹出的窗口:按"Next >"按钮
2、我们会发现除了有配置数据库外,还有删除数据库的功能,以后说不定可以派上用场,现在自然选Configure SQL Server for application services,按"Next >"按钮&/J I5_K,R-h5Ur
3、现在进入数据库选择界面,如果SQLSERVER就安装在本地的话,可以不用改任何东西,直接按"Next >"。这里的Database显示为<default>,表示默认数据库名为aspnetdb,你也可以根据自己的需要更改名称。
x#H;z!o[1]i
4、可以开始安装数据库了,当Finish按钮亮起时,表明数据库安装成功,一切顺利!&V"x7@EG a6y
/Y'K}//m8KCT_-D
这几天在学ASP.NET,可是在数据库连接时一直出现问题,原因就是在配置安全的时候发生如下错误:出现了如下错误选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足。也可能是未启用角色管理器功能造成的。请单击下面的按钮,以重定向到可以选择新数据存储区的页。下面的消息可能会有助于诊断问题: 无法连接到 SQL Server 数据库。
解决方法:
1、打开VS的命令提示,输入aspnet_regsql,用默认的数据库(aspnetdb)。 ,JA$Q;b M
2、打开VS,依次:工具-->选项-->数据库工具-->数据连接-->SQL Server实例名称(默认为空),改为你的服务器名称。 v,vmL?L"k
D J
3、还是VS,工具-->连接到数据库-->服务器名(选择刚才的服务器),选择 microsoft sql server,在服务器名称中填写"." (很重要呦^_^),然后按要求选择Windows或SQL Server身份验证,数据库选择刚才的aspnetdb。测试OK后,在高级里复制出语句 Data Source=Server;Initial Catalog=aspnetdb;User ID=sa V9K.Nb$l3z
4、打开IIS:默认网站-->属性-->ASP.NET-->编辑全局配置-->常规-->连接字符串管理器LocalSqlServer的连接字符串改为:Data Source=Server;Initial Catalog=aspnetdb;User ID=sa;Password=sa 。
5、还是在IIS:默认网站-->属性-->ASP.NET-->编辑全局配置-->身份验证-->选定"启用角色管理"
/W-{
二.数据库aspnetDB表结构
表名:aspnet_Applications
说明:保存应用程序信息
字段名
类型
属性
说明
ApplicationName
nvarchar(256)
应用程序名
LoweredApplicationName
nvarchar(256)
小写的应用程序名
ApplicationId
uniqueidentifier
PK
应用程序的id, GUID值
Description
nvarchar(256)
nullable
应用程序的 描述
表名:aspnet_Paths
说明:路径信息
字段名
类型
属性
说明
ApplicationId
uniqueidentifier
FK: appnet_Applications.ApplciationId
应用程序Id
PathId
uniqueidentifier
PK
路径Id
Path
nvarchar(256)
路径信息
LoweredPath
nvarchar(256)
小写的路径信息
表名:aspnet_Users
说明:用户信息
字段名
类型
属性
说明
ApplicationId
uniqueidentifier
应用程序Id
UserId
uniqueidentifier
PK
用户Id
UserName
nvarchar(256)
用户名
LoweredUserName
nvarchar(256)
小写的用户名
MobileAlias
nvarchar(16)
移动电话的pin码(未使用)
IsAnonymous
bit
是否为匿名用户
LastActivityDate
datetime
最后活动日期
表名:aspnet_Membership
说明:成员信息
字段名
类型
属性
说明
ApplicationId
uniqueidentifier
FK: appnet_Applications.
ApplciationId
应用程序Id
UserId
uniqueidentifier
FK: aspnet_Users.UserID
用户Id
Password
nvarchar(128)
密码
PasswordFormat
int
存储密码的格式
PasswordSalt
nvarchar(128)
密码的Hash值
MobilePIN
nvarchar(16)
手机PIN码
nvarchar(256)
电子邮件地址
LoweredEmail
nvarchar(256)
小写的电子邮件地址
PasswordQuestion
nvarchar(256)
遗忘密码问题
PasswordAnswer
nvarchar(128)
遗忘密码答案
IsApproved
bit
IsLockedOut
bit
是否锁住
CreateDate
datetime
创建时间
LastLoginDate
datetime
最后登录时间
LastPasswordChangedDate
datetime
最后密码更改时间
LastLockoutDate
datetime
最后一次锁帐号的时间
FailedPasswordAttemptCount
int
密码失败尝试次数
FailedPasswordAttemptWindowStart
datetime
密码失败尝试窗口打开时间
FailedPasswordAnswerAttemptCount
int
遗失密码问题尝试次数
FailedPasswordAnswerAttemptWindowStart
datetime
遗失密码问题输入窗口打开时间
Comment
ntext
备注
表名:aspnet_Roles
说明:角色表
字段名
类型
属性
说明
ApplicationId
uniqueidentifier
FK: appnet_Applications.ApplciationId
应用程序Id
RoleId
uniqueidentifier
PK
角色Id
RoleName
nvarchar(256)
角色名称
LoweredRoleName
nvarchar(256)
小的角色名称
Description
nvarchar(256)
nullable
描述
表名:aspnet_UsersInRoles
说明:用户角色关系表
字段名
类型
属性
说明
UserID
uniqueidentifier
FK: aspnet_Users.UserId
用户ID
RoleID
uniqueidentifier
FK: aspnet_Roles.RoleId
角色ID
表名:aspnet_Profile
说明:Profile对象存储表
字段名
类型
属性
说明
UserId
uniqueidentifier
FK: aspnet_Users.UserId
用户ID
PropertyNames
ntext
属性名称
PropertyValuesString
ntext
字符串值
PropertyValuesBinary
image
二进制值
LastUpdatedDate
datetime
最后更新日期
三.如何在vs中使用membership类
1.对于网站而言,用户身份验证与权限管理是非常重要的部分。
2.通过用户名和密码,对用户进行身份验证,并指派他可以访问的资源,这部分工作一直都是网站开发的重要内容。
3.Membership和rolemanager能够非常好的解决这个问题,不但可以对用户的登录信息进行统一管理,还可以就用户的权限进行分类管理,让开发者方便的就网站权限与安全性进行设定。
4. 如何查看使用membership保存的用户信息?
在aspnetDB数据库中的aspnet_membership表中可以看到。
5.如果使用自己建立的表,怎么用membership进行操作?
答:membership是内建在framework中的集成的框架,只能操作aspnetDB数据库,所以要么使用自己的数据库,使用自己的操作方法;要么使用membership操作aspnetDB数据库。而且不可以随意改动aspnetDB数据库中的表和字段。
6 membership类可以完成以下工作:
(1)建立一个新的membershipUser 使用createUser方法
(2)可以对用户身份进行验证
(3)找回一个membershipUser实例,使用getuser()方法
(4)更新一个membershipUser实例
(5)通过不同条件找到一个用户
(6)获得当前在线用户数量
(7)删除一个已经不再需要的账户
7. MVC中关于Membership类跟数据库的问题
当用到Membership这些关于管理用户啊什么的这些类的时候就会自动创建一个名叫ASPNETDB的数据库。。而像Membership啊。。MembershipUser啊。。MembershipProvider啊。。这几个类所连接到的是这个ASPNETDB数据库吧。。都在这个数据库进行数据读取啊修改啊什么的。。那现在可不可以设置连接到自己的数据库呢。。可以的话具体要怎么做。。不可以的话。。那像我这样需要进行网页用户管理之类的操作。。自己写方法写类来实现的吗。。诚心求高手详细解说。。
回答:
Membership它们用的是ASPNETDB这个数据库,但我们可以使用我们自定义的数据库,然而除非我们自定义的数据库有着跟这个ASPNETDB一样的模式,否则ASP.NET提供的默认的SqlMembershipProvider将无法被使用。
也就是说,如果我们还要用ASP.NET提供的SqlMembershipProvider,我们就必须ASPNETDB这个数据库文件或是它的拷贝。明显,这不是我们要的。
为此,若我们使用了自定义的数据库(而非ASPNETDB的拷贝),那么我们就必须写自己的MembershipProvider。步骤如下。
1,定义好自己的数据库,此例中为TestDB01。在我的TestDB01下有一表UserInfo,其下有字段UserID,UserName,UserAge。
2,写自己的MembershipProvider,这个类继承自命名空间System.Web.Security下的MembershipProvider类。这一步很简单,创建一个空类,举例名为MyMembershipProvider,技术上说我们可以把它放在应用程序的任何位置,但我把它放在了项目下的一个名为Infrastructure(自己加的)的文件夹下。
这一步的初始代码形式大概如下:
namespace MvcApplication5.Infrastructure
{
public class MyMembershipProvider : System.Web.Security.MembershipProvider/*我把命名空间写这了*/
{
}
}
当然,它是空的,它需要我们往里面再加一些东西。。
此时我们把光标放到“System.Web.Security.MembershipProvider”上并右击鼠标,在弹出的下拉框上我们可以看到“实现虚拟类”(我用的是英文版,我不知道有没有翻译对,原内容是“Emplement Abstract Class”),单击这一选项我们的MyMembershipProvider这个类顿时多了N多个方法,此时它的形式如下(我只截了一部分):
public class MyMembershipProvider : System.Web.Security.MembershipProvider
{
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
throw new NotImplementedException();
}
//...
public override bool ValidateUser(string username, string password)
{
throw new NotImplementedException();
}
}
可以看到,这些方法什么都没做,除了抛出一个NotImplementedException异常。当然,这不是我们希望的,这些方法需要我们自己去填充,要不然怎么叫“自定义”呢。。
呃,现在先把我们先不管别的方法,只看最后的这个ValidateUser()方法。顾名思义,这个正是我们用来验证用户的方法,对其修改如下:
public override bool ValidateUser(string username, string password)
{
SqlConnection sqlconn = new SqlConnection("Data Source=HCNG-PC;Initial Catalog=TestDB01;Integrated Security=True");/*用你的数据源名替换HCNG-PC,且TestDB01是我用来测试的自定义数据库*/
SqlCommand sqlcmd = new SqlCommand("select UserID, UserName from [UserInfo] where UserName = @userName and UserAge = @userAge", sqlconn);/*这些相信你都明白,若有不明,请补充问题*/
try
{
sqlconn.Open();
sqlcmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.NVarChar, 50));
sqlcmd.Parameters["@userName"].Value = username.Trim();
sqlcmd.Parameters.Add(new SqlParameter("@userAge", SqlDbType.SmallInt, 2));
sqlcmd.Parameters["@userAge"].Value = password;
SqlDataReader sqlRd = sqlcmd.ExecuteReader();
if (sqlRd.HasRows)
{
return true;
}
return false;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
至此,我们的自定义MembershipProvider算是完成。
3,配置web.config。把此配置文件下的<system.web>节点下的默认的<membership>节点换成如下:
<system.web>
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider" <!--前三行要用到的名字。。-->type="MvcApplication5.Infrastructure.MyMembershipProvider"/><!--注意不要漏了命名空间的名字。。-->
</providers>
</membership>
4,工作基本完成,只剩查看效果了。
在项目下加一个Default1Controller,在此Default1Controller下加如下action:
[HttpPost]
public ActionResult Index(string username, string password)
{
if (Membership.ValidateUser(username, password))
{
ViewData["message"] = "OK";
}
else
{
ViewData["message"] = "NO";
}
return View();
}
发现了吧,用个Membership.ValidateUser()就行了。
相信同时你也发现了,这样的自定义MembershipProvider似乎实在是没起到什么特别的作用,至少我是这么认为的。。
而且在MVC中最好不用登录控件,所以我们若在MVC中自定义MembershipProvider跟写自己的会员管理逻辑已没什么差别。。
如果你确实要使用自定义的MembershipProvider的话,那么以上代码显然是不够的,比如System.Web.Security.MembershipProvider的第一个方法ChangePassword(),它用来更改用户密码,这需要我们自己写的代码来实现它的逻辑。。
然后是第二个方法ChangePasswordQuestionAndAnswer()用来为用户提供更改问题答案功能,第三个方法CreateUser()来用创建新用户。。
以上是MembershipProvider,接下来还有RoleProvider,下面是一个自定义RoleProvider的一部分:
public class MyRoleProvider : RoleProvider
{
public override string[] GetRolesForUser(string username)
{
if (username == "Steve")
return new string[] { "ApprovedMember", "CommentsModerator" };
else
return new string[] { };
}
/* 被省略的部分 */
}
当然,有关RoleProvider,要说的还有它的web.config节点配置,希望你上网查查,如果你还是确定你要用它的话。。
还有就是自定义ProfileProvider,跟前二者差不多,同样如果你确定想用它的话。。
对于你的问题,概括地回答是:
1,问:那现在可不可以设置连接到自己的数据库呢?答:可以设置连接到自己的数据库。
2,问:可以的话具体要怎么做?答:如上所示。。
3,问:不可以的话?答:没有不可以的话。。只是,如果“不想这样做的话”,找本书或是网上下个例子就知道了。。
最后的话:
我之所以把自定义MembershipProvider写的稍微详细一点,并不是为了告诉你这个东西有多好用,只是告诉你它的原理。呃,我看这个东西就是出于这个目的。。
之所以很是简单地讲了一点自定义RoleProvider跟自定义ProfileProvider,除了实现它们的做法差不多外,更多的是因为打字并不是一件美差。。
而至于为什么我们能如此简单地自定义这些Provider,有兴趣看看设计模式中的“策略模式”吧。
如果不明白的话,请补充问题,希望我能帮到你。
如果这对你有帮助话,请将此标为最佳答案,谢谢。
- memberShip资料总结
- 关于membership的一点资料
- Membership
- membership
- MemberShip
- asp.net2.0中membership用法总结
- 分布式process总结之一:Multicast,Membership,Election
- MemberShip中对用户资料的序列化
- MemberShip中对用户资料的序列化
- 资料总结
- 总结资料
- 资料总结
- 资料总结
- 关于asp.net membership角色与成员资格管理的一点资料
- Membership学习membership入门
- 软件资料总结
- Cygwin 安装资料总结
- web学习总结资料
- 人类的 POWER IBM 的芯片制造历史
- 3栏布局
- 程序员的十层楼
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:策略接口
- struts2国际化开发
- memberShip资料总结
- Huffman编码
- solaris 网络设置
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:文本换行
- LAMP系列文章之:泛泛而谈LAMP(一)
- 会忘记,会过去
- PHP 中使用JavaScript时,alert函数乱码问题,终极解决方案
- 源代码和技术资料站点
- XML文件常见解析技术介绍