[ASP中使用三层架构] 9.用户登录之一 User表与相关类

基于ASP身份认证网关实现Web系统免代码改造的单点登录方案 单点登录(SSO)是现代企业身份与访问管理的核心组件,旨在解决用户在多系统间重复登录的痛点。其基本原理是通过一个集中的认证中心,在用户首次登录后颁发可信凭证,其他应用系统通过验证该凭证即可识别用户身份,从而实现一次登录、全网通行。这项技术的核心价值在于提升用户体验、统一安全策略并降低运维成本。在工程实践中,面对技术栈混杂、遗留系统众多的复杂环境,直接改造后端应用往往成本高昂、风险巨大。此时,采用网关前置模式成为一种务实高效的解决方案。该模式通过在应用前端部署一个统一的反向代理与身份认证网关,将所有认证逻辑收 阅读详情

    接下来开始讲解如何用三层架构来建立用户登录过程.
    这个过程用一般的编程方式写起来很简单,从这里入手来讲解三层架构的实例,想必大家都会更容易了解其中的逻辑结构.
   
    首先我们做一些准备工作,构造这个业务需要用到的几个类,其中包括三个部分:
    User部分的实体类MOD_User,单表数据访问类DAL_User
    UserLog部分的单表数据访问类DAL_UserLog
    User业务相关的业务逻辑类BLL_User,多表数据访问类MUL_User
   
    好,我们开始准备第一部分.
   
    [User] 表的结构如下
 [UserID] [int] IDENTITY(1,1) NOT NULL,
 [UserAccount] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [UserPassword] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [UserName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [UserPower] [int] NOT NULL,
 [LogCount] [int] NULL,
 [UserDate] [datetime] NULL,
   
    以[User]表生成一个实体类MOD_User,文件名为MOD_User.asp,放在/Class/MOD/目录下,内容如下,请大家熟悉一下property的写法
    class MOD_User
        ' ******[User] database field
     private lngUserID                               '[int] NOT NULL
     private strUserAccount                          '[ntext] 用户登录名
     private strUserPassword                         '[ntext] 密码
     private strUserName                             '[ntext] 用户名称
     private intUserPower                            '[int]   权限
     
     ' ==============================================================================
     ' Class Initialize, Terminate
     ' ==============================================================================
     Private Sub Class_Initialize
       End Sub
       Private Sub Class_Terminate
       End Sub
       
       
     ' ==============================================================================
     ' property in/out
     ' ==============================================================================
     Public Property Let UserID(ByVal Value )
      lngUserID = Convert.ToLng(Value)
     End Property
     Public Property Get UserID
      UserID    = lngUserID
     End Property
     
     Public Property Let UserAccount(ByVal Value )
      strUserAccount    = trim(Value)
     End Property
     Public Property Get UserAccount      
      UserAccount       = strUserAccount
     End Property
     
     Public Property Let UserPassword(ByVal Value )
      strUserPassword   = trim(Value)
     End Property
     Public Property Get UserPassword      
      UserPassword      = strUserPassword
     End Property
     
     Public Property Let UserName(ByVal Value ) 
      strUserName   = trim(Value)
     End Property
     Public Property Get UserName
      UserName      = strUserName
     End Property
     
     Public Property Let UserPower(ByVal Value ) 
      intUserPower  = Convert.ToInt(Value)
     End Property
     Public Property Get UserPower
      UserPower     = intUserPower
     End Property

    end class
   
    Convert 对象在此出现的比较多.
    实体类的好处之一就在这里,把值填充到类的属性中,可以将变量转换的工作完全交给这个实体类,在程序中使用的时候就不用再来来去去地转换了.
    所以鼓励大家用Property代替Public操作.
    Appdb系统会有一个功能,通过已有的数据表,直接生成对应的MOD类的代码,它会自己用Property构造如上同样的实体类,而且会根据字段类型不同自己选择不同的Convert方法进行转换. 有了这个工具,就可以节省大量的重复性的基础工作了,这个工具也是为三层架构而产生的,其他语言的编程工具中都有这样的功能,咱也不能缺.
   
   
    以[User]表生成一个单表数据访问类DAL_User,文件名为DAL_User.asp,放在/Class/DAL/目录下,内容如下:
    class DAL_User
        ' ******[User] database field
     private lngUserID                              '[int] NOT NULL
     private strUserAccount                         '[ntext]
     private strUserPassword                        '[ntext]
     private strUserName                            '[ntext]
     private intUserPower                           '[int]
       
     private strSql                                 'Sql query
     private rs_User                                'Dataset for poheader
       
     
     ' ==============================================================================
     ' Class Initialize, Terminate
     ' ==============================================================================
     Private Sub Class_Initialize
         set rs_User=server.createobject("adodb.recordset")
       End Sub
       Private Sub Class_Terminate
         set rs_User=nothing
       End Sub
       

    ' ///////////////////////////////////////////////////////////////////////////////
    '               Get  Data / dataset
    ' ///////////////////////////////////////////////////////////////////////////////
     Public Function CheckLogin(ByRef vMUser)
         strSql = " select top 1 * from [User] where UserAccount='" & page.ToSql(vMUser.UserAccount) & "'"
         rs_User.Open strSql,Data.conn,1,1
      if rs_User.bof and rs_User.eof then
          e.Add " This User does not exit ! "
          CheckLogin = false
      else
          if rs_User("UserPassword") = vMUser.UserPassword then
                    vMUser.UserID       = rs_User("UserID")
                    vMUser.UserName     = rs_User("UserName")
                    vMUser.UserPower    = rs_User("UserPower")
                    CheckLogin = true
                else
                    e.Add " Wrong password ! "
                    CheckLogin = false
                end if
      end if
      rs_User.close
     End Function
    ' ///////////////////////////////////////////////////////////////////////////////   
    '                   Update Table
    ' ///////////////////////////////////////////////////////////////////////////////
   
   
    ' ///////////////////////////////////////////////////////////////////////////////
    '                   Show UI / Show-select
    ' ///////////////////////////////////////////////////////////////////////////////
   
    end class
   
    需要解说一下的是DAL_User类中的CheckLogin方法.
    这个方法接纳一个参数(ByRef vMUser), vMUser 是一个MOD_User实例化之后一个实体对象,实例化语句为:
    set MUser = new MOD_User
    在BLL_User中会调用上面这个CheckLogin方法,将MUser传递给DAL_User.CheckLogin, 就是这里的ByRef vMUser了,习惯上我把函数的参数名前面加一个v.
    具体的实现过程请看后面的用户登录过程的实施阶段.
   
    这个地方有个需要讨论的疑点,就是实体类作为传值参数时,是应该用ByRef还是ByVal.
    在vbscript中,一个实例化的对象在被set给另外一个实例名以后,虽然名称不同,但是仍然是指向同一个内存地址,换了汤没换药. 所以在这里用ByRef ByVal效果是一模一样的.
    但是为了在程序的逻辑上的清晰,在此使用ByRef,以示这个vMUser实体类在这里被加工后,仍然会被调用它的程序继续使用.
   
    Private Sub Class_Initialize 和 Private Sub Class_Terminate应该不用解释了吧,如果不甚了解,可以去看看vbscript语法
   
   
    不知道你有没有注意到这句: page.ToSql(vMUser.UserAccount)
    page是另一个比较重要的通用类,用来处理页面上常用的操作,例如这里的ToSql就是将一个字符串加工成为安全的SQL参数,实施单引号替换为两个单引号等操作. 这个类我还没有完善,所以就不贴出来献丑了,也算作为大家来学习三层架构的作业,自己构造一个CON_Page类来用吧
   
    还有两个通用对象的身影:
    Data.conn
    e.Add " Wrong password ! "
    大家可以对照前面几章熟悉一下这两个通用类.
   
   
    另外有个注释,如下:
    ' ///////////////////////////////////////////////////////////////////////////////
    '               Get  Data / dataset
    ' ///////////////////////////////////////////////////////////////////////////////
    这个给类中的不同的方法进行分组的大分隔符,代码中还有2个类似的.
    原因是,我发现单表数据访问类中的方法,其功能上基本上只有3组:
        1.获取单值或单记录集
        2.更新数据表的内容
        3.产生出放在UI上的HTML段,例如<option value=1></option>....之类
    把这三组分开以后,再来查找某一个方法,比较容易定位.
    只是一个个人习惯,大家可以各自发挥.

asp.net三层架构实现注册登录,三层架构练习 用asp.net的三层架构做的登录,注册,适合新手练习 立即下载

相关推荐

三层架构asp.net+sql登录注册模板

三层架构asp.net+sql登录注册模板

用三层架构写实现用户登录(ASP.NET)

首先把架子搭好,如下图 然后一层一层的写,先写模型层,例如: public class User { private string userId; public string UserId { get { return userId; ...

weixin_34290000的博客 1036

一个简单的ASP.NET三层架构登陆模式

简单,最适合入门学习的三层架构例子 该项目为MVC结构,分为DAL、BLL、Model和Web及Utility Default.aspx展示的是数据的绑定和显示,Post.aspx为数据添加测试页面 本人作为一个程序的爱好者,深感到程序学习是:入门容易,进阶难!(开始说正题 )有很多入门学者在为三层架构感到困惑,不知三层架构如何实现,现在本人详细地详一个简单的例子来说明三层架构的实现,至于三层架构是什么原理,51aspx老大说得很详细了,本人不再重复。 最后,说下各层的引用关系: 1) WEB引用 DAL,Model 2)BLL引用 DAL,Model 3)DAL引用Model 4)Model无引用

(超简单基础版)ASP.NET(.Net Framework)三层架构,结合sql server实现登录与注册

第一步:首先创建一个Models类库(解决方案上) 1.使用面向对象的方法封装一个UserInfo类 public class UserInfo { public UserInfo() { } public UserInfo(int id, string uid, string pwd, string name, int age, string gender) { this.id = id; ...

m0_63117721的博客 2190

.NET三层架构简单例子(登录和注册功能)

本人做的一个非常简单的一个三层架构的网站,只有登录注册功能,希望能给初学三层的人有一点小小帮助。

asp.net登录注册——三层架构学习

用简单的登录注册学习asp.net的三层架构。。源码。学生可以当做作业交

ASP.NET创建用户注册页面

4、创建Sqlserver数据库,命名为User.mdf,创建一个表为 Users,添加列 username、password,设置数据类型。5、放置一个数据源控件SqlDataSource控件到页面,配置数据源,名称设置为zhuce,选择表 Users,下一步。3、需要用到两个必填验证控件,放置到,用户名和密码下面,和一个比较验证 放置到再输入密码下面,实现注册项简单验证。1、首先文件菜单下,新建网站 选择 c#模板,Asp.net空网站,并选择文件位置。设置好各控件ID等属性,将密码框。

ZSR1126的博客 2693

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA?

本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。

convnet3designer的博客 242

从单轨到交响:Audition多轨混音核心功能全解析

本文全面解析Adobe Audition多轨混音的核心功能,从单轨过渡到多轨编辑的技巧,包括采样率匹配、轨道颜色管理、混音器自动化模式等实用操作。重点介绍多轨编辑中的节奏对齐和总线处理,帮助音频创作者提升混音效率与质量,打造专业级音频作品。

weixin_30372371的博客 506

Wiley:International Journal for Numerical Methods in Biomedical Engineering投稿流程

中间过程省略,这个出版社很人性化,投稿的web UI也很好看。上传word之后,一步步跟着走就行,不用填太多东西。不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。

Everyday try to become better -Kobe Bryant 2545

【清风数学建模笔记】第十一讲:时间序列分析

【清风数学建模笔记】第十一讲:时间序列分析

manerzi的博客 833

ASP.NET三层架构-1.1-实现登录功能

1.创建ASP_NET数据库 create database ASP_NET go create table UserInfo( ID int IDENTITY(1,1) Not NULL Primary Key, [Name] [nvarchar](32) NOT NULL, [Pwd] [nvarchar](8) Not NULL ) insert into UserInfo values('admin','123') 打开Visual Studio 创建一个项目 创建一个解决方案TreeTi

m0_46965984的博客 970

SAP STO流程实战:如何配置外向交货单PGI后自动生成内向交货单(附避坑指南)

本文详细解析了SAP STO流程中,如何配置实现外向交货单发货过账(PGI)后自动生成内向交货单。通过分步指南,重点阐述了SPED输出类型、输出条件记录、收货点及确认控制码等关键配置,并提供了针对“No goods receipt possible”等常见错误的避坑指南,助力实现跨公司物料转移流程的自动化与高效衔接。

weixin_28327051的博客 395

ASP.NET Core 2.0 MVC - 获取当前登录用户信息

一、前言   上篇实战完成后,没想到会有那么多的圈友给了那么多的支持,甚至连只是作为代码仓储的git上也给了一些小星星,真的感觉很惶恐啊,哈哈哈,毕竟代码写的很烂啊。由于上一篇只是大概说了下项目,所以准备写下这篇详细说下自己对于获取当前登录用户的设计与实现,原本准备上周末就完成的这篇,结果周六一起来,发现自己起水痘了,嗯,很悲催。。。请了一个星期的假,今天好歹头不痛,不发烧能看电脑了,就努力努...

weixin_30301449的博客 865

WPF插件架构-如何动态加载封装好的第三方DLL的界面

插件架构中如何自动加载第三方DLL中的UI界面

lg24k的博客 1882

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

ASP.NET实现禁止用户重复登录

本文先为大家介绍如何利用缓存Cache方便地实现此功能。  Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户; 而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息。  只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的

zhu1991_的博客 2875

告别示教器!用C#和ABB PC SDK 6.08打造你的第一个Windows机器人控制台(附完整连接代码)

本文详细介绍了如何使用C#和ABB PC SDK 6.08开发Windows机器人控制台应用,实现无示教器的机器人控制。从环境配置、SDK引用到机器人发现、连接及状态监控,提供了完整的代码示例和架构设计建议,帮助开发者快速掌握上位机控制技术。

weixin_29758911的博客 323

asp判断是否移动端_asp判断用户端是电脑访

[ASP技术] asp判断用户端是电脑访问还是移动设备方法2014-06-28 22:43:10 , Posted by ttaspset regex = new regexpregex.ignorecase = trueregex.global = trueregex.pattern = "ubrowser|mini 9.5|vx1000|lge |m800|e860|u940|ux840|co...

weixin_29480659的博客 215

CAM350常用快捷键

CAM350快捷键 CAM350常用快捷键

bhxc809751502的博客 3059

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

自创page类中获取当前用户权限 --by winter

在三层中,关于如何获取当前用户的权限?是管理员,还是普通用户? 大致思路: 先通过this.User.Identity.Name 获取当前用户的实体(model),然后根据实体的用户 角色属性(rolename)来最终获取当前用户的权限。 参考代码: 1 /// <summary> 2 /// 获取当前登录的用户 3 ...

139

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ASP.NET里面简单的记住用户名和密码

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Data; 8 9 publ...

weixin_33935505的博客 476

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ASP.NET IE10/IE11 Cookie写入失败根源与修复方案

Cookie是Web应用维持用户状态的基础机制,其工作原理依赖HTTP响应头中的Set-Cookie指令与浏览器的策略执行。当服务端生成Cookie时,浏览器会依据自身隐私策略(如P3P)、域名上下文(第一方/第三方)、User-Agent特征等进行多层校验。在IE10/IE11中,Trident内核引入了严格的第三方Cookie审查机制,若响应缺失合法P3P头,即使服务端调用Response.Cookies.Add(),ASP.NET框架也会因检测到Trident/6.0或Trident/7.0 User

rongdmmap的博客 733

ASP.NETMVC—如何扩展USER.IDENTITY的可用属性

原文链接:https://www.it566.top/index.php/wenzhang/else/2021/03/25/78398/ 我使用mvc5identity2.0让用户登录到我的网站,身份验证细节存储在一个SQL数据库中。Asp.netIdentity已经以一种标准的方式实现,这可以在许多在线教程中找到。 IdentityModels中的ApplicationUser类已扩展为包含一些自定义属性,例如整数OrganizationId。其思想是为了数据库关系的目的,可以创建许多用户并将其分配给

艾斯卡诺的博客 612

ASP.NET 记住用户名和密码

using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Data; 8 9 public partial cl

jingmeifeng的专栏 3707
上一篇: [ASP中使用三层架构] 8.文件目录结构
下一篇: [ASP中使用三层架构] 10.用户登录之二 UserLog表与相关类
当下透明
博客等级 码龄21年 7粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值