zoukankan
html css js c++ java
aspnet_Membership_GetPassword
ALTER
PROCEDURE
dbo.aspnet_Membership_GetPassword
--
获取密码
@ApplicationName
NVARCHAR
(
256
),
@UserName
NVARCHAR
(
256
),
@MaxInvalidPasswordAttempts
INT
,
@PasswordAttemptWindow
INT
,
@TimeZoneAdjustment
INT
,
@PasswordAnswer
NVARCHAR
(
128
)
=
NULL
AS
BEGIN
DECLARE
@UserId
UNIQUEIDENTIFIER
DECLARE
@PasswordFormat
INT
DECLARE
@Password
NVARCHAR
(
128
)
DECLARE
@passAns
NVARCHAR
(
128
)
DECLARE
@IsLockedOut
BIT
DECLARE
@LastLockoutDate
DATETIME
DECLARE
@FailedPasswordAttemptCount
INT
DECLARE
@FailedPasswordAttemptWindowStart
DATETIME
DECLARE
@FailedPasswordAnswerAttemptCount
INT
DECLARE
@FailedPasswordAnswerAttemptWindowStart
DATETIME
/**/
/*
声明一大堆的变量
*/
DECLARE
@ErrorCode
INT
SET
@ErrorCode
=
0
DECLARE
@TranStarted
BIT
SET
@TranStarted
=
0
IF
(
@@TRANCOUNT
=
0
)
--
--若当前活动事务为0,开始事务
BEGIN
BEGIN
TRANSACTION
SET
@TranStarted
=
1
--
设置事务参数为1
END
ELSE
SET
@TranStarted
=
0
DECLARE
@DateTimeNowUTC
DATETIME
--
声明当前标准时间
EXEC
dbo.aspnet_GetUtcDate
@TimeZoneAdjustment
,
@DateTimeNowUTC
OUTPUT
/**/
/*
调用存储过程。第一个参数在存储过程中好象没用到,哪里用呢?-_-!
*/
SELECT
@UserId
=
u.UserId,
@Password
=
m.Password,
@passAns
=
m.PasswordAnswer,
@PasswordFormat
=
m.PasswordFormat,
@IsLockedOut
=
m.IsLockedOut,
@LastLockoutDate
=
m.LastLockoutDate,
@FailedPasswordAttemptCount
=
m.FailedPasswordAttemptCount,
@FailedPasswordAttemptWindowStart
=
m.FailedPasswordAttemptWindowStart,
@FailedPasswordAnswerAttemptCount
=
m.FailedPasswordAnswerAttemptCount,
@FailedPasswordAnswerAttemptWindowStart
=
m.FailedPasswordAnswerAttemptWindowStart
FROM
dbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.aspnet_Membership m
WITH
( UPDLOCK )
WHERE
LOWER
(
@ApplicationName
)
=
a.LoweredApplicationName
AND
u.ApplicationId
=
a.ApplicationId
AND
u.UserId
=
m.UserId
AND
LOWER
(
@UserName
)
=
u.LoweredUserName
/**/
/*
又是aspnet_Applications/aspnet_Users/aspnet_Membership三表连接查询,条件为
输入参数@UserName/@ApplicationName
*/
IF
(
@@rowcount
=
0
)
--
-返回受上一语句影响的行数,即无结果就回滚
BEGIN
SET
@ErrorCode
=
1
GOTO
Cleanup
END
IF
(
@IsLockedOut
=
1
)
--
是否锁住,如果是也回滚(锁定用户当然不让操作……)
BEGIN
SET
@ErrorCode
=
99
GOTO
Cleanup
END
IF
(
NOT
(
@PasswordAnswer
IS
NULL
) )
--
如果密码提示问题不为空(干嘛那样写?和前面的区别吗?)
BEGIN
IF
( (
@passAns
IS
NULL
)
OR
(
LOWER
(
@passAns
)
<>
LOWER
(
@PasswordAnswer
) ) )
/**/
/*
如果此用户的密码提示问题为空或者密码提示问题不为输入的密码提示问题
*/
BEGIN
IF
(
@DateTimeNowUTC
>
DATEADD
( minute,
@PasswordAttemptWindow
,
@FailedPasswordAnswerAttemptWindowStart
) )
/**/
/*
如果当前时间大于计算出来的时间,如下
*/
/**/
/*
就是当打开密码提示问题窗口失败的时间的分钟数上加上@PasswordAttemptWindow参数的值
*/
/**/
/*
参照DATEADD函数
*/
BEGIN
SET
@FailedPasswordAnswerAttemptWindowStart
=
@DateTimeNowUTC
--
密码失败尝试窗口打开时间
SET
@FailedPasswordAnswerAttemptCount
=
1
END
/**/
/*
这时间计算还真有点乱,-_-!!
*/
ELSE
BEGIN
SET
@FailedPasswordAnswerAttemptCount
=
@FailedPasswordAnswerAttemptCount
+
1
SET
@FailedPasswordAnswerAttemptWindowStart
=
@DateTimeNowUTC
END
BEGIN
IF
(
@FailedPasswordAnswerAttemptCount
>=
@MaxInvalidPasswordAttempts
)
BEGIN
SET
@IsLockedOut
=
1
SET
@LastLockoutDate
=
@DateTimeNowUTC
END
/**/
/*
如果尝试次数超过限制,则锁定用户,并设置最近锁定时间为当前时间
*/
END
SET
@ErrorCode
=
3
END
ELSE
BEGIN
IF
(
@FailedPasswordAnswerAttemptCount
>
0
)
/**/
/*
如果密码问题存在,但是尝试次数大于0
*/
BEGIN
SET
@FailedPasswordAnswerAttemptCount
=
0
SET
@FailedPasswordAnswerAttemptWindowStart
=
CONVERT
(
DATETIME
,
'
17540101
'
,
112
)
END
--
-好象是还原为初值了
END
UPDATE
dbo.aspnet_Membership
SET
IsLockedOut
=
@IsLockedOut
, LastLockoutDate
=
@LastLockoutDate
,
FailedPasswordAttemptCount
=
@FailedPasswordAttemptCount
,
FailedPasswordAttemptWindowStart
=
@FailedPasswordAttemptWindowStart
,
FailedPasswordAnswerAttemptCount
=
@FailedPasswordAnswerAttemptCount
,
FailedPasswordAnswerAttemptWindowStart
=
@FailedPasswordAnswerAttemptWindowStart
WHERE
@UserId
=
UserId
/**/
/*
更新数据表
*/
IF
(
@@ERROR
<>
0
)
BEGIN
SET
@ErrorCode
=
-
1
GOTO
Cleanup
END
END
IF
(
@TranStarted
=
1
)
BEGIN
SET
@TranStarted
=
0
COMMIT
TRANSACTION
END
IF
(
@ErrorCode
=
0
)
SELECT
@Password
,
@PasswordFormat
/**/
/*
如果错误代码为0,则返回密码和格式化的密码(这里才是主要的东西)
*/
RETURN
@ErrorCode
Cleanup:
IF
(
@TranStarted
=
1
)
BEGIN
SET
@TranStarted
=
0
ROLLBACK
TRANSACTION
END
RETURN
@ErrorCode
END
查看全文
相关阅读:
angular.js 渲染
HTML5 与 CSS3 jQuery部分知识总结
下拉滚动协议文本框展示样式(不可删除文本内容)
06对象
05数组
1文字与字体
04函数
03循环
02运算符
01基础
原文地址:https://www.cnblogs.com/ruanbl/p/490054.html
最新文章
json.stringify()和json.parse()
拷贝数组和对象,深拷贝,浅拷贝
侧边栏鼠标移入显示,移除消失
下面5个小图,上面一个大图,点击小图,切换大图
图片切换,下一张,上一张
AJAX
JSON
数组对象
JavaScript基础题库
canvas(画布)
热门文章
正则表达式
JavaScript心法
CSS知识点
HTML常用标记、属性、CSS代码、JS代码(速查)
div上下切换(新增、删除、上下div切换)
标题、内容段末文本溢出“......”显示
当锚点定位遇上position: fixed
图片在浏览器窗口水平居中展示(图片尺寸不限制)
查看全文---收起(文本内容少于四行,不显示查看全文---收起,超过五行时才显示出来并有此功能)
position:fixed 兼容浏览器低版本
Copyright © 2011-2022 走看看