浅析ASP.NET的Membership

开发 后端
本文介绍ASP.NET的Membership,以及介绍把程序copy到远程服务器上然后运行。由于某种原因,虽然我们能够连接到Membership数据库,但是当登陆的时候就会出现错误了。

在本地开发一个ASP.NET2.0的应用程序时使用了Membership、Roles或Profile特性。你创建了ASP.NET一些新用户,一切都没有问题。

然后把这个程序copy到远程服务器(remote server)上(或者只是移动到你本地服务器上的其他目录)然后运行。由于某种原因,虽然我们能够连接到Membership数据库,但是当登陆的时候就会出现错误了,它并不抛出连接错误(connection error),而是提示你像类似的错误:“尝试登陆失败,请重试”(Login attempt unsuccessful, please try again)

原因:
这种经常出现的错误的原因是因为Membership(或者是roles、profile) provider已经被加入到了程序的web.config里了。但是applicationName属性(attribute)并没有被指定(假设下面的代码的粗体部分布存在地话)

  1. <membership> 
  2. <providers> 
  3. <clear/> 
  4. <add name="AspNetSqlMembershipProvider" 
  5. type="System.Web.Security.SqlMembershipProvider, System.Web, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
     
  6. connectionStringName="LocalSqlServer" 
  7. enablePasswordRetrieval="false" 
  8. enablePasswordReset="true" 
  9. requiresQuestionAndAnswer="true" 
  10. requiresUniqueEmail="false" 
  11. passwordFormat="Hashed" 
  12. maxInvalidPasswordAttempts="5" 
  13. minRequiredPasswordLength="7" 
  14. minRequiredNonalphanumericCharacters="1" 
  15. passwordAttemptWindow="10" 
  16. passwordStrengthRegularExpression="" 
  17. applicationName="/" 
  18. /> 
  19. </providers> 
  20. </membership> 

如果它被copy到其他的地方或服务器上并且更换了虚拟路径(比如说“/app1” 或更通常被设置的“/”)后,当Membership APIs被使用时他们就“看”不到数据库里已有的用户了——因为他们将会使用一个不同的applicationName去数据库里寻找用户,相应地过滤 application_Users表中的用户。这就是为什么会出现上面错误的原因。

如何解决这个问题:
最简单的办法是打开ASPNETDB数据库中的aspnet_Users和aspnet_Application表,去“回想”(figure out,因为那时候我们的虚拟目录叫什么名字我们恐怕已经忘了)创建用户和其他数据的时候的程序名称(去aspnet_Application表中查找)

然后打开你的web.config文件,添加一个applicationName属性到provider声明的地方并且给他赋值,例如,下面的代码我们把它设置为在aspnet_Application表存在的/website8:

  1. <membership> 
  2. <providers> 
  3. <clear/> 
  4. <add name="AspNetSqlMembershipProvider" 
  5. type="System.Web.Security.SqlMembershipProvider, System.Web, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
     
  6. connectionStringName="LocalSqlServer" 
  7. enablePasswordRetrieval="false" 
  8. enablePasswordReset="true" 
  9. requiresQuestionAndAnswer="true" 
  10. requiresUniqueEmail="false" 
  11. passwordFormat="Hashed" 
  12. maxInvalidPasswordAttempts="5" 
  13. minRequiredPasswordLength="7" 
  14. minRequiredNonalphanumericCharacters="1" 
  15. passwordAttemptWindow="10" 
  16. passwordStrengthRegularExpression="" 
  17. applicationName="/website8" 
  18. /> 
  19. </providers> 
  20. </membership> 

以上介绍ASP.NET的Membership

【编辑推荐】

  1. ASP.NET的TypeConverter
  2. 浅析ASP.NET的TypeResolver
  3. ASP.NET中定义JavaScriptConverter
  4. 在ASP.NET中替换Sys.Services的方法
  5. 使用ASP.NET AJAX的Profile Service
责任编辑:佚名 来源: IT专家网
相关推荐

2009-08-05 13:58:26

ASP.NET Mem

2009-12-07 09:23:05

ASP.NET MVC

2009-07-27 10:18:12

TypeResolveASP.NET

2009-08-27 17:20:30

ASP.NET登陆控件membership配

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET优点

2009-07-22 18:03:00

ASP.NET ASP

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2009-07-29 14:12:45

ASP.NET tra

2009-07-28 10:59:13

ASP.NET IIS

2009-07-24 15:47:35

ASP.NET与ASP

2009-08-03 13:38:18

ASP.NET编程模型

2009-07-27 17:25:53

ASP.NET验证控件

2009-08-03 10:07:20

ASP.NET Ses

2009-08-04 17:16:16

ASP.NET代码优化

2009-08-05 16:17:29

ASP.NET For

2009-08-05 16:50:09

ASP.NET For

2009-07-24 18:02:46

ASP.NET编程
点赞
收藏

51CTO技术栈公众号