.NET Forms身份验证

.NET表单身份验证

ASP.NET Forms 身份验证的简单实现:1)在Web.config文件中配置应用程序使用 Forms 身份验证;2)创建登陆页面,将用户身份验证票证添加到Cookie集合。

       1.配置文件中设置为Forms验证
   <authentication mode="Forms">
      
<forms loginUrl="NetFromwork/FormLogin.aspx" defaultUrl="NetFromwork/FormLogin.aspx" name=".ASPNETFORMSTEST" protection="All" timeout="20" ></forms>
   
</authentication>
   
<authorization>
      
<deny users="?"/>
   
</authorization>

       2.验证用户合法后,将身份验证票证写入Cookie集合
    string userName = "Jimmy";
    
//Create ticket
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(1), false"");
    
//Encrypt the ticket.
    String encTicket = FormsAuthentication.Encrypt(ticket);
    
//Create the cookie.
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
    
//Redirect back to default or original URL.
    FormsAuthentication.RedirectFromLoginPage(userName, true);

       上述代码已经实现了简单的Forms身份验证功能。接下来我们看看票据信息构造函数FormsAuthenticationTicket()和用户重定向函数RedirectFromLoginPage()原型:
函数FormsAuthenticationTicket()原型
        //
        
// 摘要:
        
//     使用 cookie 名、版本、目录路径、发布日期、过期日期、持久性以及用户定义的数据初始化 System.Web.Security.FormsAuthenticationTicket
        
//     类的新实例。
        
//
        
// 参数:
        
//   version:
        
//     票证的版本号。
        
//
        
//   name:
        
//     与身份验证票关联的用户名。
        
//
        
//   userData:
        
//     存储在票证中的用户特定的数据。
        
//
        
//   isPersistent:
        
//     如果票证将存储在持久性 Cookie(跨浏览器会话保存),则为 true;否则为 false。如果该票证存储在 URL 中,将忽略此值。
        
//
        
//   issueDate:
        
//     票证发出时的本地日期和时间。
        
//
        
//   cookiePath:
        
//     票证存储在 Cookie 中时的路径。
        
//
        
//   expiration:
        
//     票证过期时的本地日期和时间。
        public FormsAuthenticationTicket(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData, string cookiePath);
函数RedirectFromLoginPage()原型
 //
        
// 摘要:
        
//     将经过身份验证的用户重定向回最初请求的 URL 或默认 URL。
        
//
        
// 参数:
        
//   userName:
        
//     经过身份验证的用户名。
        
//
        
//   createPersistentCookie:
        
//     若要创建持久 Cookie(跨浏览器会话保存的 Cookie),则为 true;否则为 false。
        public static void RedirectFromLoginPage(string userName, bool createPersistentCookie);

       论坛常见的登陆有效期功能是怎么实现的呢?是通过设置哪些参数实现的呢?不禁有些迷茫,涉及到登陆有效期的参数有如下几个:函构造数FormsAuthenticationTicket()中的isPersistentexpiration,函数RedirectFromLoginPage()中的createPersistentCookie,配置文件中还有timeout属性,究竟要怎么设置才能实现“登陆一小时,一天,一个月,永久,浏览器进程”功能呢?

       下面谈谈我对这些参数的理解,通过查找网上资料,MSDN和程序测试而来,有理解错误的地方欢迎大家指正。

       1.关于持久Cookie,并不是说isPersistent=True或者createPersistentCookie=True时,就能够保持永久登陆状态,持久Cookie解释成跨浏览器会话保存的Cookie更合适。当设置为True时,不同浏览器进程之间可以共享该Cookie,也就是说在一个IE中登陆后,在另一个IE中打开还保持登陆状态。

       2.关于函数RedirectFromLoginPage(),MSDN上解释是这样的“如果 CookiesSupported 属性为 true,并且 ReturnUrl 变量位于当前应用程序中,或者 EnableCrossAppRedirects 属性为 true,则 RedirectFromLoginPage 方法将发出身份验证票证并使用 SetAuthCookie 方法将其置于默认 Cookie 中。”
       可见,在执行函数RedirectFromLoginPage()时,会覆盖掉FormsAuthenticationTicket实例的票据信息,所以第二部分代码中,不该调用该函数,而应该用下面的代码代替:
    string userName = "Jimmy";
    
//Create ticket
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(1), false"");
    
//Encrypt the ticket.
    String encTicket = FormsAuthentication.Encrypt(ticket);
    
//Create the cookie.
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
    
//Redirect back to default or original URL.
    Response.Redirect(FormsAuthentication.GetRedirectUrl(userName,true ));  //代替RedirectFormLoginPage

       3.关于登陆有效时间,涉及到登陆时间的只有构造函数FormsAuthenticationTicket()的参数expiration票据过期时间和配置文件中的timeout属性了,这两个有什么关系呢?----票据的有效时间是由expiration属性决定的,而timeout只有当expiration属性没有显示设置的时候才生效。
摘自:http://www.cnblogs.com/freshman0216/archive/2008/06/17/1224215.html
参考:http://www.cnblogs.com/liuqhui/archive/2008/07/20/1246987.html

转载于:https://www.cnblogs.com/besuccess/articles/3487535.html

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

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

相关文章

计算机对口升学可以报考的学校,对口升学可以报考的学校都在这里,赶快来收藏吧...

对口升学指对口高考&#xff0c;在平常又叫对口单招&#xff0c;对口升学&#xff0c;是从中等职业学校毕业生招生&#xff0c;强调中等职业学校毕业生对口升高职的专业技能考试&#xff0c;以专业技能成绩为主要录取依据的招生办法。报名条件具有正式学籍的中等职业学校毕业生…

Visual Studio 常用快捷键 (二)

想不到上一篇 【Visual Studio 常用快捷键】 受这么多人的欢迎。看来大家对Visual Studio的用法非常感兴趣。 接下来我准备写一个 “Visual Studio使用技巧 ” 一个系列的博客。 希望对大家有所帮助 本篇继续介绍几个常用的快捷键 阅读目录 按两下Tab键回退到光标的上一次位置…

企业邮箱收发信息服务器怎么设置,网易闪电邮企业邮箱收发设置教程(IMAP)...

网易闪电邮企业邮箱收发设置教程(IMAP)发表时间 2019-05-30人气 73(1)启动闪电邮后&#xff0c;点击“邮箱---新建邮箱账户”菜单&#xff0c;如下图&#xff1a;(2)输入“邮箱地址和密码”&#xff0c;点击下拉箭头继续设置&#xff0c;设置完成后点击下一步&#xff0c;如下图…

订餐系统之Excel批量导入

批量导入现在基本已经成为各类系统的标配了&#xff0c;当前&#xff0c;我们订餐系统也不例外&#xff0c;什么商家呀、商品呀、优惠码之类的&#xff0c;都少不了。毕竟嘛&#xff0c;对非开发人员来说&#xff0c;看到Excel肯定比看到很多管理系统还是要亲切很多的。这里&am…

oracle数据库之数据导入问题

2019独角兽企业重金招聘Python工程师标准>>> 在oracle数据库中建立好数据库以后&#xff0c;需要使用PLSQL进行用户创建&#xff0c;打开PLSQL&#xff0c;使用时需要使用最高权限进入PLSQL。如下图&#xff1a; 不需要使用用户名和密码&#xff0c;进入数据库操作。…

win服务器创建文件夹命令,Win10系统如利用命令提示符或WSL创建任意大小空白文件...

要测试网盘或服务器的上传&#xff0c;下载速度&#xff0c;需要指定大小的文件用来测试。创建的空白文件虽然没有任何内容&#xff0c;但是有大小&#xff0c;可以用来测试实际传输速度、覆盖已删除数据等用途。这篇文章是本站教大家在Win10中用命令或WSL创建任意大小空白文件…

计算UILabel带行间距的行高

为什么80%的码农都做不了架构师&#xff1f;>>> //设置lab的行间距 NSMutableAttributedString *attributedString [[NSMutableAttributedString alloc] initWithString:_doubletStr]; NSMutableParagraphStyle *paragraphStyle [[NSMutableParagraphStyle alloc…

关于farpoint公司的控件:SPREAD for .NET Windows Forms Ed.的一些简单方法.

View Code using System;using FarPoint.Win.Spread ;using System.Drawing;using System.Windows.Forms;namespace DFO010{/// <summary>/// Fpspread的相关函数.2006/4/12 制作:Chouka/// </summary> public class Classspd {public Classspd() { }/// <su…

串行总线协议笔记

I2C --INTER-IC串行总线的缩写&#xff0c;是PHILIPS公司推出的芯片间串行传输总线。它以1根串行数据线&#xff08;SDA&#xff09;和1根串行时钟线&#xff08;SCL&#xff09;实 现了双工的同步数据传输。具有接口线少&#xff0c;控制方式简化&#xff0c;器件封装形式小&a…

[置顶] 程序员编程生产力相差10倍意味着什么?

在软件工程研究中&#xff0c;被验证得最多的结论就是对于同等经验的两个不同程序员&#xff0c;在效率和质量上可能会有10倍的差距。研究人员还发现&#xff0c;这种差距也适用于团队级别上&#xff0c;也就是说在同一行业内的不同的团队也是如此。 软件开发中的个人效率的变化…

生成随机长度字符串,比如密码等

2019独角兽企业重金招聘Python工程师标准>>> public function createstr( $length ) {$chars "abcdefghijklmnopqrstuvwxyz0123456789"; $str "";for ( $i 0; $i < $length; $i ) { $str. substr($chars, mt_rand(0, strlen($chars)-1), 1…

css margin属性,css margin属性怎么用?css margin属性用法教程

在css中&#xff0c;有一个重要的属性margin&#xff0c;很多人都不知道css margin属性是什么&#xff1f;怎么用&#xff0c;下面为您总结一下css margin属性用法教程。margin是css用于在一个声明中&#xff0c;对所有css margin属性的简写&#xff0c;正因为margin来控制css中…

gaia引擎分析(二)场景管理

只是粗略的分析原理&#xff0c;大虾轻喷~~ Gaia引擎中没有场景管理器&#xff08;scenemanager&#xff09;这种东西&#xff0c;但是并不是没有场景管理&#xff0c;而是在cGameHost类中有一课场景树进行场景组织、一棵四叉树用来进行剪裁。 class cGameHost class cGameHos…

C++.Templates学习总结归纳1

函数模板 首先我们来看看函数模板&#xff0c;一个函数模板&#xff08;function template&#xff09;代表一族函数&#xff0c;其表现和一般的函数一样&#xff0c;只是其中的某些元素在编写的时候还不知道&#xff0c;也就是说这些还不知道的元素&#xff0c;我们将其参数化…

Xml Tips

Xml Tips//z 2012-3-7 16:43:47 PM IS2120CSDN1. xml 中的注释<!-- 这是注释 -->并非用于 XML 分析器的内容&#xff08;例如与文档结构或编辑有关的说明&#xff09;可以包含在注释中。注释以 <!-- 开头&#xff0c;以 --> 结尾&#xff0c;例如<!--catalog la…

Window7+vs2008+QT环境搭建

记录下自己是如何搭建QT开发环境的&#xff0c;备忘吧。操作系统&#xff1a;win7&#xff0c;其实winXP&#xff0c;win7都没有关系&#xff1b;我使用的机器安装的操作系统是win7&#xff1b;开发环境是VS&#xff0c;使用2005,2008,2010或者即将发布的2011都行&#xff1b;因…

Javascript创建对象的几种方式?

javascript 中常见的创建对象的几种方式&#xff1a; 1. 使用Object构造函数创建&#xff1b; 使用Object构造函数来创建一个对象&#xff0c;下面代码创建了一个person对象&#xff0c;并用两种方式打印出了Name的属性值。 var person new Object(); person.name"kevin&…

使用 RMAN 同步数据库

使用 RMAN 同步数据库使用 RMAN 同步数据库一&#xff0e;概述二 操作步骤(一)&#xff0e;把生产库置为归档模式(二).启动rman做数据库0级备份(三)&#xff0e;修改生产库数据库到未归档(四)&#xff0e;拷贝备份集到测试库(五).在测试库上的操作一&#xff0e;概述 因项目组遇…

js实现图片上传预览及进度条

js实现图片上传预览及进度条 原文js实现图片上传预览及进度条 最近在做图片上传的时候&#xff0c;由于产品设计的比较fashion&#xff0c;上网找了比较久还没有现成的&#xff0c;因此自己做了一个&#xff0c;实现的功能如下&#xff1a; 1&#xff1a;去除浏览器<input …

webapi文档描述-swagger

最近做的项目使用mvcwebapi&#xff0c;采取前后端分离的方式&#xff0c;后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word文档方式进行交流&#xff0c;实际操作中却很少动手去写。为了解决这个问题&…