代码改变世界

Membership配置

2011-02-12 11:01  于为源  阅读(1333)  评论(0编辑  收藏  举报

<membership defaultProvider="AspNetMembershipProvider">

<Providers>

<clear/>

<add name="AspNetMembershipProvider" /*名称*/

type="System.Web.Security.SqlMembershipProvider" /*处理程序类名,可以自己实现继承自MemberShipProvider的处理类,大概需要实现21个方法*/

connectionStringName="ApplicationServices"  /*数据库连接字符串名称*/

enablePasswordRetrieval="false"  /*是否允许取回密码*/

passwordFormat="Clear" /*密码存储格式Clear,Hashed,Encrypted*/

enablePasswordReset="true"  /*是否允许重设密码*/

requiresQuestionAndAnswer="false" /*是否需要用户密码提示问题*/

requiresUniqueEmail="false" /*是否需要唯一的邮件地址*/

maxInvalidPasswordAttempts="5" /*最大密码尝试次数*/

minRequiredPasswordLength="6" /*最短密码长度*/

minRequiredNonalphanumericCharicters="0" /*最少的非字母数字的字符的长度*/  

passwordAttemptWindow="10"  /*获取时间长度,在该时间间隔内对提供有效密码或密码答案的连续失败尝试次数进行跟踪。 */

applicationName="/"

/>

</providers>

</membership>

实在搞不懂,为什么起这个名字——PasswordAttemptWindow,Window,怎么是 Window 呢?所以不能望名生义,去 MSDN 上查了,原来是这个意思:

获取在锁定成员资格用户之前允许的最大无效密码或无效密码提示问题答案尝试次数的分钟数。

有点拗口,可能微软也这么觉得,所以在 .NET Framework 3.5 时,将其解释换成了:

获取时间长度,在该时间间隔内对提供有效密码或密码答案的连续失败尝试次数进行跟踪。

这下好理解了些了。

我们注意到,描述中使用了“获取”一词,代表只读的,要设置的话,在配置文件中设置,请参见:ASP.NET 成员资格-配置

以下是 MSDN 的更多解释:

PasswordAttemptWindow 属性与 MaxInvalidPasswordAttempts 属性一起使用可帮助防止不需要的源通过反复尝试来猜测成员资格用户的密码或密码答案。当用户尝试使用其密码登录、更改或重置其密码时,在指定时间长度内只允许进行一定次数的连续尝试。该时间长度在 PasswordAttemptWindow 属性中指定,该属性标识无效尝试之间所允许的分钟数。

如果用户重置其密码时的连续失败尝试次数等于 MaxInvalidPasswordAttempts 属性中存储的值,且自上次无效尝试以来所经过的时间少于在 PasswordAttemptWindow 属性中指定的分钟数,则会锁定该成员资格用户。通过将 IsLockedOut 属性设置为 true 可锁定该用户,除非调用 UnlockUser 方法才能解除对该用户的锁定。

如果当前失败尝试和上次失败尝试之间的间隔大于 PasswordAttemptWindow 属性设置,则当前无效尝试被视为第一次无效尝试。如果在达到所允许的最多无效尝试次数之前输入了有效密码答案,则无效密码答案尝试计数会设置为 0(零)。如果在达到所允许的最多无效尝试次数之前输入了有效密码答案,则无效密码尝试计数和无效密码答案尝试计数会设置为 0(零)。

无效密码和无效密码提示问题答案的尝试次数分别独立累计。例如,如果 MaxInvalidPasswordAttempts 设置为 5,并且已进行了三次无效的密码尝试,随后进行了两次无效的密码答案尝试,在 PasswordAttemptWindow 之内须再进行两次无效的密码尝试(或者三次无效的密码答案尝试)才会锁定该成员资格用户。