开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 3685|回复: 0

再来一个登陆处理的代码逻辑,请讨论

[复制链接]

0

精华

10

贡献

38

赞扬

实习版主

帖子
18
软币
158
在线时间
10 小时
注册时间
2013-9-30
发表于 2014-5-12 14:26:53 | 显示全部楼层 |阅读模式
[C#] 纯文本查看 复制代码
/// <summary>
        /// 登录按钮的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void butLogin_Click(object sender, ImageClickEventArgs e)
        {
            //获取验证码对象
            //--验证码一般存储在Session会话中,因为Session是有有效时间的,因此超过指定的生命期,Session就会自己消失
            //--判断Session是否为空可以判定Session是否过期
            var checkCode =
                SessionFunction.GetInstance()
                    .GetSession(SystemConfigValue.GetInstance().SessionCheckImageCode);

            //验证码过期的处理方式
            //--当Session过期会使的存储的验证码被自动回收,此时对象应为null
            //--当验证码过期后,应该停止页面其他响应,给出友好的提示
            if (Equals(checkCode, null))
            {
                MessageBox.GetInstance().Alert(Page, txtCheckCode, "验证码过期", "当前页面验证码已过期,请重新载入!");
                return;
            }

            //验证码输入错误的处理方式
            //--判断服务器存储的验证码是否和输入的验证码相同,如果不同应该终止后续页面响应并给出友好的提示
            //--可以使用ToLower()方法将字符串变成小写,如果严格区分大小写,请取消ToLower()方法的使用
            if (!string.Equals(checkCode.ToString().ToLower(), txtCheckCode.Text.Trim().ToLower()))
            {
                MessageBox.GetInstance().Alert(Page, txtCheckCode, "验证码输入错误", "验证码输入错误,请重新输入!");
                return;
            }

            //登录账户输入不能为空
            //--判定用户账户是否为空,为空则停止页面响应,给出友好的提示信息
            //--判定登录账户的用户名是否为空需要注意过滤空格,通常空格也是有效字符,但是作为实际使用是不合理的,需要清除
            //--清除字符两端的空格通常使用Trim()方法
            if (string.Equals(txtLoginName.Text.Trim(), string.Empty))
            {
                MessageBox.GetInstance().Alert(Page, txtLoginName, "登录账户输入错误", "登录账户名不能为空,请输入!");
                return;
            }

            //登录密码输入不能为空
            //--判定用户的登录密码是否为空,为空则停止页面响应并给出友好的提示
            //--系统判断用户密码应该注意过滤空格,空格也是有效字符,但是一半不准采用空格作为密码存储
            //--清除字符两端的空格通常使用Trim()方法
            if (string.Equals(txtloginPwd.Text.Trim(), string.Empty))
            {
                MessageBox.GetInstance().Alert(Page, txtLoginName, "登录密码输入错误", "登录密码不能为空,请输入!");
                return;
            }

            //获取用户名,注意清楚空格
            var loginName = txtLoginName.Text.Trim();

            //获取用户密码并进行md5加密处理,加密采用32位加密方式处理
            //EncryptString.EncryptType类提供了8位,16位,和32位加密算法
            var loginPwd = EncryptString.GetInstance()
                .Md5String(txtloginPwd.Text.Trim(), EncryptString.EncryptType.ThrityTwo);

            //根据用户名和密码从数据库中获取用户的实体数据,不存在用户数据,实体则为空
            var userEntity = SysUser.GetInstance().GetEntity(loginName, loginPwd);

            //判断数据库中是否存在用户
            if (!Equals(null, userEntity))
            {
                //虽然登录成功,但是不一定分配了角色,需要进行判断
                //获取当前用户的权限集合
                var userPermissionList = CheckPower.GetInstance().GetUserPermission(userEntity.UserCode);
                if (!( userPermissionList.Count > 0 ))
                {
                    //注销Cookie,撤销用户登录状态
                    CookieFunction.GetInstance().QuitCookie();
                    //给出友好的提示信息,并终止页面的其他响应
                    MessageBox.GetInstance().Alert(Page, txtLoginName, "登录错误提示信息", "当前用户未启用任何系统角色,系统禁止用户登录");
                    return;
                }

                //将用户登录票据加密后存入cookies,如果存入失败则终止操作
                if (!CookieFunction.GetInstance()
                    .InsertCookie(userEntity.UserCode, userEntity.LoginName,
                        int.Parse(SystemConfigValue.GetInstance().SessionOffTime)))
                    return;

                //缓存用户的权限和菜单设置
                if (!CacheUserPermission(userPermissionList, userEntity.UserCode))
                {
                    //缓存用户数据的过程发生错误,给出友好的提示信息
                    MessageBox.GetInstance().Alert(Page, txtLoginName, "登录错误提示信息", "系统缓存用户数据过程发生错误,请联系管理员或重新登录");
                    return;
                }

                //存入系统后台登录日志
                var logEntity = new Entity.SysLogInfo
                {
                    CreateTime = DateTime.Now,
                    FromIpAddress = StringFunction.GetInstance().GetIpAddress(),
                    FromUrl = StringFunction.GetInstance().GetUrlAddress(),
                    LogCode = StringFunction.GetInstance().GetGuidString(),
                    LogContent = userEntity.LoginName + " 成功登录系统",
                    LogType = SystemLogType.LoginText,
                    PageCode = "",
                    UserCode = userEntity.UserCode,
                    ApplicationCode = "",
                    ModuleCode = ""
                };

                //登记系统日之后,转入系统的受页面
                //这里可以人性化的存储用户的首页面,以便定制用户的操作习惯
                if (SysLogInfo.GetInstance().Insert(logEntity))
                {
                    Response.Redirect("Default.aspx?random=" + StringFunction.GetInstance().GetGuidString());
                }
                else
                {
                    //插入日志异常,系统给与友好的提示信息
                    MessageBox.GetInstance().Alert(Page, txtLoginName, "登录错误提示信息", "当前系统异常,请稍后尝试重新登录!");
                }
            }
            else
            {
                //不存在用户,提示错误信息
                MessageBox.GetInstance().Alert(Page, txtLoginName, "登录错误提示信息", "您的用户名或者密码错误");
            }
        }

评分

参与人数 4贡献 +3 赞扬 +4 收起 理由
Cactus_CC + 1 赞一个
lhmlyx2723356 + 1 赞一个
羽叶 + 3 + 1 赞一个
seamone + 1 赞一个

查看全部评分

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 15:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表