首页 > 其他分享 >案例: 三次锁定(上)

案例: 三次锁定(上)

时间:2024-11-08 15:46:16浏览次数:5  
标签:name cmd 案例 pwd 三次 using 锁定 conn string

输入错了三次禁止登录, 15分钟后才能继续. 用数据库记录ErrorTimes, 最后出错时间uLoginTime数据导入

第一步:

        在App.config中添加连接字符串

<connectionStrings>
	<add name="conStr" connectionString="Data Source = WINGEL; Initial Catalog = People; Trusted_Connection = SSPI"/>
</connectionStrings>

        创建一个在项目中的文件夹, 取名叫service, 然后创建一个接口类叫userService.cs

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Dome16_三次锁定.service
{
    internal interface userService
    {
        // 判断用户是否被锁定
        bool IsLock(string name);

        // 更新错误次数归0
        void UpdateErrorTime(string name);

        // 登入是否成功
        bool IsLoginSuccess(string name, string pwd);

        // 是否注册成功
        bool IsRegister(string name, string pwd);

        // 更新时间和错误登入次数
        void UpdateLoginTime_ErrorTime(string name);
    }
}

        创建一个文件夹在service文件夹内, 取名叫serviceimpl, 然后再创建一个实现接口的类叫userServiceimpl.cs

using Dome16_三次锁定.utils;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Dome16_三次锁定.service.serviceimpl
{
    internal class userServiceimpl : userService
    {
        string conStr { get; set; }

        public userServiceimpl()
        {
            this.conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
        }

        // 判断用户是否被锁定
        public bool IsLock(string name)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "select * from [User] where uErrorTime = 3 and " +
                    "Datediff(minute, uLoginTime, getdate()) < 15 and uLoginName = @name";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open();

                    SqlDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        b = true;
                    }
                }
            }

            return b;
        }

        // 更新错误次数归0
        public void UpdateErrorTime(string name)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "update [User] set uErrorTime = 0 where uLoginName = @name";

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open();

                    cmd.ExecuteNonQuery(); // 增删改
                }
            }
        }

        // 登入是否成功
        public bool IsLoginSuccess(string name, string pwd)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "select * from [User] where uLoginName = @name and uPwd = @pwd";

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    pwd = Md5Util.Md5Create(pwd);

                    cmd.Parameters.AddWithValue("@name", name);
                    cmd.Parameters.AddWithValue("@pwd", pwd);

                    conn.Open();

                    SqlDataReader r = cmd.ExecuteReader();

                    if (r.HasRows)
                    {
                        b = true;
                    }
                }
            }

            return b;
        }

        // 是否注册成功
        public bool IsRegister(string name, string pwd)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "select * from [User] where uLoginName = @name";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open ();

                    SqlDataReader reader = cmd.ExecuteReader();

                    if (!reader.HasRows) 
                    {
                        if(Register(name, pwd))
                        {
                            b = true;
                        }
                    
                    }

                }

            }

            return b;
        }

        bool Register(string name, string pwd)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "INSERT into [User] VALUES (@name,@pwd,@logintime,@errortime)";
                using (SqlCommand cmd = new SqlCommand(sql, conn)) 
                {
                    pwd = Md5Util.Md5Create(pwd);

                    cmd.Parameters.AddWithValue ("@name", name);
                    cmd.Parameters.AddWithValue("@pwd", pwd);
                    cmd.Parameters.AddWithValue("@logintime", DateTime.Now);
                    cmd.Parameters.AddWithValue("@errortime", 0);
                    conn.Open ();

                    int r = cmd.ExecuteNonQuery();

                    if(r > 0)
                    {
                        b = true;
                    }
                }
            }
            return b;
        }

        // 更新时间和错误登入次数
        public void UpdateLoginTime_ErrorTime(string name)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "UPDATE [User] SET uErrorTime = uErrorTime + 1, uLoginTime = GETDATE() where uLoginName = @name";

                using(SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open ();
                    cmd.ExecuteNonQuery();
                }
            }
        }

    }
 
}

标签:name,cmd,案例,pwd,三次,using,锁定,conn,string
From: https://blog.csdn.net/2301_79007589/article/details/143378345

相关文章

  • Grafana如何利用Karpenter消除50%的云资源浪费?|落地案例
    原文链接:https://grafana.com/blog/2023/11/09/how-grafana-labs-switched-to-karpenter-to-reduce-costs-and-complexities-in-amazon-eks/编译:cloudpilot.aiGrafana团队在他们的官方博客中介绍了他们从采用ClusterAutoscaler转向Karpenter的历程,本文将介绍他们如何进......
  • 鸿蒙 Next 密码管理综合案例:打造安全便捷的用户认证系统
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在数字化时代......
  • ansible的一些命令 案例
    ansible的一些命令案例1.调用测试ansiblehkweb-mcommand-a'uptime'2.查看配置ansiblehkweb-msetup3.ping命令ansiblehkweb-mping10.46.93.177|SUCCESS=>{"changed":false,"ping":"pong"}10.46.93.174|SUCCESS=&......
  • 【路径规划】基于A*-三次样条曲线求解UAV路径规划问题
    摘要本文提出了一种结合A算法与三次样条曲线的无人机(UAV)路径规划方法。该方法通过A算法找到从起点到终点的最优路径,再利用三次样条曲线对路径进行平滑处理,以确保无人机在复杂地形中实现平稳的导航和避障能力。实验结果表明,基于A*和三次样条曲线的路径规划方法在避免障碍的同......
  • 默认 iOS 设置使已锁定的 iPhone 容易受到攻击
    苹果威胁研究的八个要点苹果手机间谍软件问题日益严重了解Apple苹果的设备和服务器基础模型发布尽管人们普遍认为锁定的iPhone是安全的,但iOS中的默认设置可能会让用户面临严重的隐私和安全风险。安全研究员Lambros通过PenTestPartners透露,锁定的iPhone上的默......
  • 鸿蒙开发案例:水平仪
     【1】引言(完整代码在最后面)高仿纯血鸿蒙Next的水平仪效果。主要功能包括:1.倾斜角度检测:通过注册加速度传感器事件监听器,实时获取设备的前后倾斜角度(pitch)和左右倾斜角度(roll)。2.角度计算与更新:根据传感器数据计算新的倾斜角度,如果新角度与旧角度的变化超过设定的阈值,则更......
  • mapreduce案例_电信用户平均停留时间
    packagecom.wll.dianxin;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.......
  • mapreduce案例_用户停留时间关联城市名
    importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.lib.input.FileSplit;importorg.apache.hadoop.mapreduce.Job;impo......
  • CODESYS可视化桌面屏保-动态气泡制作详细案例
    #一个用于可视化(HMI)界面的动态屏保的详细制作案例程序#前言:在工控自动化设备上,为了防止由于人为误触发或操作引起的故障,通常在触摸屏(HMI)增加屏幕保护界面,然而随着PLC偏IT化的发展,在控制界面上的美观程度也逐渐向上位机或网页前端方面发展,本篇模仿Windows系统的屏幕保护背......
  • 鸿蒙开发案例:七巧板
     【1】引言(完整代码在最后面)本文介绍的拖动七巧板游戏是一个简单的益智游戏,用户可以通过拖动和旋转不同形状的七巧板块来完成拼图任务。整个游戏使用鸿蒙Next框架开发,利用其强大的UI构建能力和数据响应机制,实现了流畅的用户体验。【2】环境准备电脑系统:windows10开发工具:D......