1

我有一个工作的 asp.net 4 会员网站大约 5 个月,今天我更改了正则表达式以放松密码限制。我仍然可以创建和访问新帐户,但不能再访问任何以前注册的帐户。

我检查了数据库并确认它们都还在。我最初的想法是密码错误。我检查了两个我知道密码的帐户,但都无法访问。我尝试使用密码恢复选项,但是当我输入用户名时,我被告知该用户不存在。

当我检查数据库并查阅成员资格表和个人资料表时,新旧用户、正则表达式更改前后的所有用户都在同一个表中。这将我引向我的最终发现,也是我没有经验的发现。是否有一个新的机器密钥正在创建新用户但无法破译旧用户,从而使它们不可用?如果是这样,我该如何解决这个问题?

4

2 回答 2

1

就像您的评论一样,我的第一个想法是应用程序密钥已被更改。此密钥存储在 web.config/system.web/membership 中:

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider"
      ...
      applicationName="YOUR_KEY_HERE" />
  </providers>
</membership>

此密钥允许具有相同会员提供程序的不同应用程序(例如,System.Web.Security.SqlMembershipProvider在您的情况下)使用相同的数据库来存储会员数据。

一个提供者不会看到来自另一个提供者的用户,反之亦然,因为他们在查询数据库时会考虑应用程序名称。但是当您查看 Users 表时,您可能不会立即注意到这种关系,因为SqlMembershipProvider在 Users 表中使用了 Guid。但它是 Applications 表的外键,您可以在其中找到应用程序名称。

另请参阅:配置 ASP.NET 2.0 Membership 和其他 Providers 时始终设置“applicationName”属性

于 2012-01-02T21:04:25.563 回答
0

我的问题略有不同*,但我在 web.config 中指定了我自己的机器密钥。在此处查看详细信息:http: //msdn.microsoft.com/en-us/library/ff649308.aspx

(* 我的应用程序在一个大型虚拟服务器场中从一个服务器到另一个服务器徘徊,因此每次跃点都会更改机器密钥,导致应用程序无法读取它之前设置的 cookie。)

于 2012-01-02T20:42:09.577 回答