[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

pix4d安装步骤

pix4d三维模型软件的安装步骤

Little_Bee_27000的博客 1万+

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

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

weixin_30372371的博客 506

论文解析-sciPENN

用这2个CITE-seq共有的protein作为训练集,分别将他们特有的protein作为测试集,评估sciPENN对CITE-seq数据集中缺失的protein丰度预测准确度。来自Seurat 4 的PBMC数据集,样本被注射水疱性口炎病毒 (VSV) 载体 HIV 疫苗,数据集包含每个样本注射疫苗0天、3天、7天的CITE-seq数据。PBMCs作为训练集,MALT作为测试集,利用scRNA-seq测试17个蛋白质表达水平。Monocyte:随机取4个样本作为训练集,剩余4个样本作为测试集。

weixin_46065198的博客 1022

手机热点+Advanced IP Scanner:5分钟搞定树莓派无屏SSH连接(附详细配置截图)

本文详细介绍如何利用手机热点和Advanced IP Scanner工具快速实现树莓派的无屏SSH连接。通过简单的WiFi配置和IP扫描,5分钟内即可完成连接,特别适合外出调试或空间有限的工作环境。文章包含详细步骤、配置截图和常见问题解决方案,帮助开发者高效管理树莓派设备。

ik678901234的博客 954

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

PT静态时序分析实战:从基础命令到高级报告解析

本文详细介绍了PT(PrimeTime)静态时序分析(STA)的实战技巧,从基础命令如pt_shell和report_timing的使用,到高级报告解析与问题排查。通过丰富的实例和脚本示例,帮助工程师快速掌握时序分析的核心技能,提升芯片设计验证效率。

weixin_29289821的博客 954

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

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

weixin_30301449的博客 865

浅谈武术擂台格斗机器人大赛

武术擂台机器人赛是工科类专业的一个跨学科的竞赛项目,它涵盖了机械结构、硬件电路和计算机程序等技术领域。笔者在校期间有幸参加过四次这样的比赛,有成功也有失败,对此深有感悟。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。

weixin_43811044的博客 1万+

UWB定位进阶:如何利用DW1000的CIR数据做NLOS信号识别?

本文深入探讨了如何利用DW1000芯片的信道脉冲响应(CIR)数据进行非视距(NLOS)信号识别,以提升UWB定位精度。通过分析CIR数据的核心价值、预处理方法、特征提取技术以及机器学习模型构建,为研究人员和工程师提供了实用的解决方案,帮助克服室内定位中的NLOS挑战。

weixin_28729205的博客 474

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

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

zhu1991_的博客 2875

华为OD机试 - 机器人活动区域(Java 双机位C卷 200分)

现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6。M、N、k均为整数,且1

学Java,找哪吒 916

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

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

139

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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、付费专栏及课程。

余额充值