SQL存储过程登录日志异常:登录失败仍记录日志
解决登录日志仅在成功时写入的问题
你的问题出在日志插入语句位于存储过程的主逻辑(BEGIN/END块)之外,无论登录校验是否通过,这条插入语句都会被执行。以下是修改后的存储过程代码,确保只有登录成功时才写入日志:
ALTER PROCEDURE [dbo].[sp_KullaniciGiris] @username varchar(10), @pw nvarchar(20) AS BEGIN -- 执行登录校验查询 SELECT * FROM Kullanicilar WHERE username = @username AND pw = @pw AND IsActive = 1; -- 检查校验查询是否返回有效用户(即登录成功) IF @@ROWCOUNT > 0 BEGIN -- 写入登录成功日志 INSERT INTO LogIslem(Kullanici, LogText, Sayfa, Islem) VALUES( @username, 'username:' + @username + ' pw:' + @pw, 'FormLogin', 'Login Success' -- 明确标记登录状态,便于日志分析 ); END END
关键修改说明:
- 将日志插入逻辑移入
BEGIN/END块内部,通过@@ROWCOUNT变量判断前面的校验查询是否返回了匹配的用户(@@ROWCOUNT会返回上一条SQL语句影响的行数) - 把
Islem字段的值改为Login Success,后续排查日志时能更直观区分登录状态 - 如果需要记录登录失败的日志,可在
IF块后添加ELSE分支,插入对应的失败日志内容
内容的提问来源于stack exchange,提问作者khalannz7
相关产品推荐
相关产品推荐

