关于asp.net 2.0的用户、角色管理总结(转)
2007-06-18 18:03
561 查看
在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
原文:Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers
作者:Scott Guthrie
翻译:范维肖
注释:对于个别名词保留英文描述或翻译参考。
场景:
在本地开发一个asp.net2.0的应用程序时使用了Membership、Roles或Profile特性。你创建了一些新用户,一切都没有问题。
然后把这个程序copy到远程服务器(remote server)上(或者只是移动到你本地服务器上的其他目录)然后运行。由于某种原因,虽然我们能够连接到membership数据库,但是当登陆的时候就会出现错误了,它并不抛出连接错误(connection error),而是提示你像类似的错误:“尝试登陆失败,请重试”(Login attempt unsuccessful, please try again)
原因:
这种经常出现的错误的原因是因为membership(或者是roles、profile) provider已经被加入到了程序的web.config里了。但是applicationName属性(attribute)并没有被指定(假设下面的代码的粗体部分布存在地话)
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/"
/>
</providers>
</membership>
如果applicationName属性没有被配置的话,当往程序的数据库里添加数据的时候,asp.net会使用程序在web服务器里的虚拟目录路径(vroot Path)自动的计算applicationName的值。我们打开aspnetdb数据库,看aspnet_Applications表,就能了解这一行为:
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/website8"
/>
</providers>
</membership>
这样程序就能正常的工作,无论我们部署这个程序到那个虚拟目录。
当然,我们还要保证Roles、Profile、WebPartPersonalization或其他的我们配置的providers也要被配置了。
这样我们的程序可以正常工作了。
如果在一开始就避免它:
避免这个问题的最好的办法是始终设置applicationName的值。一个比较好的默认值是使用“/”。
http://www.happig.net/summer/detail.asp?blog_id=1&content_id=221
http://www.happig.net/summer/detail.asp?blog_id=1&content_id=225
/article/4659389.html
原文:Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers
作者:Scott Guthrie
翻译:范维肖
注释:对于个别名词保留英文描述或翻译参考。
场景:
在本地开发一个asp.net2.0的应用程序时使用了Membership、Roles或Profile特性。你创建了一些新用户,一切都没有问题。
然后把这个程序copy到远程服务器(remote server)上(或者只是移动到你本地服务器上的其他目录)然后运行。由于某种原因,虽然我们能够连接到membership数据库,但是当登陆的时候就会出现错误了,它并不抛出连接错误(connection error),而是提示你像类似的错误:“尝试登陆失败,请重试”(Login attempt unsuccessful, please try again)
原因:
这种经常出现的错误的原因是因为membership(或者是roles、profile) provider已经被加入到了程序的web.config里了。但是applicationName属性(attribute)并没有被指定(假设下面的代码的粗体部分布存在地话)
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/"
/>
</providers>
</membership>
如果applicationName属性没有被配置的话,当往程序的数据库里添加数据的时候,asp.net会使用程序在web服务器里的虚拟目录路径(vroot Path)自动的计算applicationName的值。我们打开aspnetdb数据库,看aspnet_Applications表,就能了解这一行为:
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/website8"
/>
</providers>
</membership>
这样程序就能正常的工作,无论我们部署这个程序到那个虚拟目录。
当然,我们还要保证Roles、Profile、WebPartPersonalization或其他的我们配置的providers也要被配置了。
这样我们的程序可以正常工作了。
如果在一开始就避免它:
避免这个问题的最好的办法是始终设置applicationName的值。一个比较好的默认值是使用“/”。
http://www.happig.net/summer/detail.asp?blog_id=1&content_id=221
http://www.happig.net/summer/detail.asp?blog_id=1&content_id=225
/article/4659389.html
相关文章推荐
- ASP.NET 2.0的用户和角色管理
- asp.net 2.0 用户管理功能结构
- 使用 IIS 进行 Microsoft ASP.NET 2.0 成员/角色管理,第 2 部分:实现
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
- 重新过一遍ASP.NET 2.0(C#)(6) - Membership&RoleManager(成员资格和角色管理)
- 七天学会ASP.NET MVC (五)――Layout页面使用和用户角色管理
- Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限
- ASP.NET 2.0角色及成员管理
- asp.net 2.0 用户管理功能结构
- asp.net用户角色管理
- 温故知新ASP.NET 2.0(C#)(6) - Membership&RoleManager(成员资格和角色管理)
- ASP.NET 2.0角色及成员管理
- ASP.NET 2.0 成员资格和角色管理授权
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- ASP.NET 2.0角色及成员管理
- ASP.NET 2.0角色及成员管理
- ASP.NET 2.0角色及成员管理
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
- 关于asp.net membership角色与成员资格管理的一点资料
- 温故知新ASP.NET 2.0(C#)(6) - Membership&RoleManager(成员资格和角色管理)