分享一个 ASP.NET WebForm 使用 Form Authentication 的例子

news2025/1/17 21:16:52

image

前言

前些天一个朋友说他们客户的网站出了点故障,让我帮忙看看,这个网站还是用 ASP.NET WebForm 做的,很久以前的技术了,不过很多客户就是这样,只要网站还能稳定地运行,一般就不会去折腾升级,_

简单地看了下,问题比较简单,只是在连接 LDAP 域账户进行身份验证的过程中出了问题,随手就解决了,不过 Form Authentication 算是一种经典而又灵活的身份验证的方式,尤其是配合近些年比较流行的 LDAP/AD 域账户,账户的安全由 LDAP/AD 域分配和控制,Form Authentication 的灵活性和方便性就体现出来,前段时间写过一篇 ASP.NET MVC 使用 Form Authentication 的例子,今天继续记录和分享一下 ASP.NET WebForm 使用 Form Authentication 的步骤。

Step By Step 步骤

  1. 在 .NET FrameWork 框架下创建一个 ASP.NET WebForm 项目

  2. 配置 Web.config

    <configuration>
    	<system.web>
    		<authentication mode="Forms">
    			<forms loginUrl="Login_.aspx"></forms>
    		</authentication>
    		<!--设置哪些页面需要身份验证,哪些可以匿名访问,下里这里是所有页面都要身份验证-->
    		<authorization>
    			<deny users="?"/>
    		</authorization>
    		......
    	</system.web>
    	......
    </configuration>
    
  3. 创建 Logon.aspx 页面,并编写后端登录方法(留意注释

    using System.Data.SqlClient;
    using System.Web.Security;
    
    private bool ValidateUser( string userName, string passWord )
    {
    	// 从数据库或其它源验证帐号密码
    }
    
    // 点击登录按钮
    private void cmdLogin_ServerClick(object sender, System.EventArgs e)
    {
    	// 方法一
    	// 调用 RedirectFromLoginPage 方法自动生成表单身份验证 Cookie,并重定向用户到事件的适当 cmdLogin_ServerClick 页面
    	// if (ValidateUser(txtUserName.Value,txtUserPass.Value))
    	// 	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value, chkPersistCookie.Checked);
    	// else
    	// 	Response.Redirect("logon.aspx", true);
    	
    	// 方法二,比较灵活
    	// 自定义 FormsAuthenticationTicket 数据,生成身份验证票证,对其进行加密,创建 Cookie,将其添加到响应中,然后重定向用户
    	if (ValidateUser(txtUserName.Value,txtUserPass.Value))
    	{
    		FormsAuthenticationTicket tkt;
    		string cookiestr;
    		HttpCookie ck;
    		tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
    		DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
    		cookiestr = FormsAuthentication.Encrypt(tkt);
    		ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
    		if (chkPersistCookie.Checked)
    			ck.Expires=tkt.Expiration;
    		ck.Path = FormsAuthentication.FormsCookiePath;
    		Response.Cookies.Add(ck);
    
    		string strRedirect;
    		strRedirect = Request["ReturnUrl"];
    		if (strRedirect==null)
    			strRedirect = "default.aspx";
    		Response.Redirect(strRedirect, true);
    	}
    	else
    		Response.Redirect("logon.aspx", true);
    }
    
  4. 编写 Logon.aspx 页面的前端代码,比较简单,忽略

  5. 运行项目,输入账号和密码,点击登录按钮,即可验证登录效果。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建基于Django的博客系统增加广告轮播图(三)

上一篇&#xff1a;ChatGPT搭建博客Django的web网页添加用户系统&#xff08;二&#xff09; 下一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 功能概述 增加轮播图显示广告信息。 需求详细描述 1. 增加轮播图显示广告信…

Vue04-模版语法

一、插值语法 作用&#xff1a;将指定的值放在指定的位置。 二、指令语法 效果&#xff1a; 将href中的跳转地址&#xff0c;交给Vue实例管理&#xff1a; Vue的指令&#xff0c;以v-xxxx开头&#xff0c;以表示它们是 Vue 提供的特殊 attribute。 2-1、v-bind命令 可以给标签…

C盘清理攻略!!!详细步骤

c盘爆满怎么清&#xff0c;往下看 一、清缓存文件键盘winr打开运行窗口&#xff0c;输入&#xff1a;%temp% 二、清理安装包文件键盘winr打开运行窗口&#xff0c;输入&#xff1a;softwaredistribution 三、清理软件解压临时文件键盘winr打开运行窗口&#xff0c;输入&#xf…

使用matplotlib绘制折线条形复合图

使用matplotlib绘制折线条形复合图 介绍效果代码 介绍 在数据可视化中&#xff0c;复合图形是一种非常有用的工具&#xff0c;可以同时显示多种数据类型的关系。在本篇博客中&#xff0c;我们将探讨如何使用 matplotlib 库来绘制包含折线图和条形图的复合图。 效果 代码 imp…

[数据集][目标检测]脑肿瘤检测数据集VOC+YOLO格式9787张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9787 标注数量(xml文件个数)&#xff1a;9787 标注数量(txt文件个数)&#xff1a;9787 标注…

代理IP类型有哪些?定义与区别

您应该对代理有了一定的了解。但是&#xff0c;代理服务器也有不同的类型。就其来源而言&#xff0c;最常见的代理服务器类型是住宅代理和数据中心代理&#xff1a; 1、住宅代理 住宅代理是 ISP 向房主提供的 IP 地址。它是与物理位置关联的真实 IP 地址&#xff0c;因此允许…

LeetCode-165. 比较版本号【双指针 字符串】

LeetCode-165. 比较版本号【双指针 字符串】 题目描述&#xff1a;解题思路一&#xff1a;字符串分割解题思路二&#xff1a;双指针背诵版&#xff1a; 题目描述&#xff1a; 给你两个 版本号字符串 version1 和 version2 &#xff0c;请你比较它们。版本号由被点 ‘.’ 分开的…

硕士课程 可穿戴设备之作业一

作业一 第一个代码使用的方法是出自于[1]。 框架结构 如下图&#xff0c;不过根据对代码的解读&#xff0c;发现作者在代码中省去了对SSR部件的实现&#xff0c;下文再说。 Troika框架由三个关键部件组成&#xff1a;信号分解&#xff0c;SSR和光谱峰值跟踪。&#xff08;粗…

灯塔歌曲音乐下载官网

灯塔歌曲音乐下载官网网址&#xff1a;www.dengtamp3.com 灯塔音乐下载上线以“用心服务&#xff0c;认真负责”为核心价值。 我们的团队是一个青春的团队&#xff0c;朝气蓬勃。我们采用最新的服务模式&#xff0c;以网为媒为广大客户提供服务&#xff0c;我们坚持以“用心&a…

“Apache Kylin 实战指南:从安装到高级优化的全面教程

Apache Kylin是一个开源的分布式分析引擎,它提供了在Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力,支持超大规模数据的亚秒级查询。以下是Kylin的入门教程,帮助您快速上手并使用这个强大的工具。 1. 安装Kylin Apache Kylin的安装是一个关键步骤,它要求您具备一…

[QT] MAC使用Qt Creator运行程序如何仅运行一个进程?

大家刚开始使用QtCreator会发现每次run程序&#xff0c;都会出现一个程序进程&#xff0c;使得调试操作增加。如下&#xff0c;每次run都会出现一个demo14的进程。 如何每次run后&#xff0c;就关闭上一次的进程&#xff0c;而重新拉起新进程呢&#xff1f; 看这里 这是默认…

MFC3d立体按钮制作

1、本程序基于前期我的博客文章MFC用CButtonST类实现图片透明按钮(免费源码下载) 2、添加CeXDib.cpp CeXDib.h ShadeButtonST.cpp ShadeButtonST.h到项目文件夹下&#xff0c;和FileView中如图。 3、在ButtonShadeDlg.h中添加代码 #include "ShadeButtonST.h" #in…

pdf文件太大如何变小,苹果电脑压缩pdf文件大小工具软件

压缩PDF文件是我们在日常办公和学习中经常会遇到的需求。PDF文件由于其跨平台、保持格式不变的特点&#xff0c;被广泛应用于各种场合。然而&#xff0c;有时候我们收到的PDF文件可能过大&#xff0c;不便于传输和存储&#xff0c;这时候就需要对PDF文件进行压缩。下面&#xf…

Java实现一个公共方法解析不同类型的表格

首先是公共方法 private String getCellValueAsString(Cell cell) {if (cell null) {return "";}String value "";switch (cell.getCellType()) {case STRING:value cell.getStringCellValue();break;case NUMERIC:if (DateUtil.isCellDateFormatted(ce…

git版本控制工具常用命令

一、本地仓库管理 push 向远程推送代码 pulll 拉取代码 二、远程仓库管理 三、分支操作 本地主分支master 远程主分支main head指向当前分支 查看&#xff1a;git branch 创建分支: git branch 名字 切换分支&#xff1a;git checkout 名字 合并分支&#xff1a;git…

CS4344国产替代音频DAC数模转换芯片DP7344采样率192kHz

目录 DAC应用简介DP7344简介结构框图DP7344主要特性微信号&#xff1a;dnsj5343参考原理图 应用领域 DAC应用简介 DAC&#xff08;中文&#xff1a;数字模拟转换器&#xff09;是一种将数字信号转换为模拟信号&#xff08;以电流、电压或电荷的形式&#xff09;的设备。电脑对…

收银系统源码-千呼新零售2.0【合作案例】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

MySQL数据库常见工具的基础使用_1

在上一篇文章中提到了对MySQL数据库进行操作的一些常见工具 mysqlcheck mysqlcheck是一个用于数据库表的检查&#xff0c;修复&#xff0c;分析和优化的一个客户端程序 分析的作用是查看表的关键字分布,能够让sql生成正确的执行计划(支持InnoDB,MyISAM,NDB)检查的作用是检查…

Java【springBoot和springCould引入外部jar包】

在项目的研发过程中&#xff0c;我们经常需要导入外部系统提供的jar包&#xff0c;并且这种jar包并没有上传到开源的maven仓库&#xff0c;属于内部环境的包&#xff0c;那么应该如何添加呢&#xff1f; springBoot 1、首先&#xff0c;将你的 JAR 文件拷贝到项目的 resource…

【k8s 控制器:ReplicaSet、Deployment、StatefulSet ...】

控制器 ReplicaSet、Deployment、StatefulSet 和 DaemonSet 都是 Kubernetes 中的控制器对象&#xff0c;用于管理 Pod 的创建、扩展、缩减和更新等操作。 一、Deployment 适用无状态服务应用部署&#xff1b;Deployment 是在 ReplicaSet 的基础上提供了更高级功能的控制器。它…