原文:https://www.cnblogs.com/kyo-lynn/p/3418577.html

原文:https://www.cnblogs.com/fish-li/archive/2012/04/15/2450571.html

注意1:

  1、需要在web.config中添加节点,

  2、需要引用命名空间:System.Web.Security

注意2:

注意 票据时间 和 cookie时间
 比如:
  cookie时间为5秒,票据时间为5秒,用户在5秒内刷新,登录时间会一直延续下去,如果超过5秒,登录状态消失
  cookie时间为5秒,票据时间为5000秒,只要登录时间超过5秒,不管用户是否刷新页面,登录状态消失

1、需要在Web.config中添加节点,添加在system.web下。

<authentication mode="Forms"></authentication>
        //获取认证信息
public ActionResult Index()
{
if (Request.IsAuthenticated)
{
//获取认证信息
//Request.Cookies[FormsAuthentication.FormsCookieName] != null
//Request.IsAuthenticated
string user = User.Identity.Name;//Request.RequestContext.HttpContext.User.Identity.Name
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var ticket = FormsAuthentication.Decrypt(cookie.Value);
string data = ticket.UserData;
return Content($"用户已登录 <br> user:{user} <br> data:{data}");
}
return Content("用户未登录");
}
        //登录1
public ActionResult Login1()
{
FormsAuthentication.SetAuthCookie("name2", true);
return Content("登录成功,name: name2");
} //登录2
public ActionResult Login2()
{
/*
判断是否登录的唯一标志,就是 看看 有没有名称为FormsAuthentication.FormsCookieName的cookie,有就是登录了。 按照asp.net forms验证的设计思想,如果要将自定义数据放到Cookie里面,
首先应该定制一个FormsAuthenticationTicket,将自定义数据放到其UserData里,
然后用FormsAuthentication.Encrypt加密这个Ticket,
最后用new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)生成一个Cookie,加入到Response.Cookies中, 作为登录标注。
并不是直接修改 HttpCookie的Value或者Values。
*/ //创建认证信息 Ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(, "name1", DateTime.Now, DateTime.Now.AddSeconds(), false, "value1"); //票据加密
string encryptedTicket = FormsAuthentication.Encrypt(ticket); //写入到cookie
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
System.Web.HttpContext.Current.Response.SetCookie(cookie); return Content($"cookie <br> name:{cookie.Name} <br> value:{cookie.Value}");
}
        //退出
public ActionResult Logout()
{
FormsAuthentication.SignOut();
return Content("退出成功");
}

测试1:用户在5秒内刷新页面,登录状态会一直持续下去

测试2:不管用户怎么刷新,超过5秒后,就会退出登录状态

测试3:用户在5秒内刷新页面,登录状态会一直持续下去。超过3秒刷新,用户登录状态消失

测试1 和 测试3 的区别:

  测试1:票据时间 和 cookie时间 都为5秒

  测试3:票据时间为3秒,cookie时间为5秒

  结论:测试3,就算用户在4秒的时候刷新页面,但那个时间用户从游览器提交的票据,在后台判断是已经失效的,因为票据的过期时间为3秒。

测试1 和 测试2 的区别:

  测试1:票据时间 和 cookie时间 都为5秒

  测试2:票据时间为5000秒,cookie时间为5秒

  结论:测试2,用户在5秒内刷新页面,游览器有带cookie往服务端请求。

     如果时间超过5秒,游览器请求的时候,就不带cookie。

     这个时候,虽然票据没有过期,但是与票据关联的cookie(应该是票据本身)根本就没有被提交到服务端,

     所以还是为未登陆状态。

过期时间分为两块:

  1、cookie的过期时间

    cookie的过期时间 决定了 游览器是否会把票据(票据本身就是存在cookie里面的)提交到后台

  2、票据的过期时间

    后台判断过期时间的依据,这个才是实实在在的过期时间。

    如果票据过期了,就算伪造cookie上传票据,也没法通过后台的验证。

记录一下一些自己的理解

C# ASP.NET Forms身份认证的更多相关文章

  1. 细说ASP.NET Forms身份认证

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  2. 简单的ASP.NET Forms身份认证

    读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛 ...

  3. IE11下ASP.NET Forms身份认证无法保存Cookie的问题

    IE11下ASP.NET Forms身份认证无法保存Cookie的问题 折腾了三四天,今天才找到资料,解决了. 以下会转贴,还没来得及深究,先放着,有空再学习下. ASP.NET中使用Forms身份认 ...

  4. 【转】权限管理学习 一、ASP.NET Forms身份认证

    [转]权限管理学习 一.ASP.NET Forms身份认证 说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单 ...

  5. ASP.NET Forms身份认证详解

    ASP.NET身份认证基础 在开始今天的内容之前,我想有二个最基础的问题首先要明确: 1. 如何判断当前请求是一个已登录用户发起的? 2. 如何获取当前登录用户的登录名? 在标准的ASP.NET身份认 ...

  6. 细说ASP.NET Forms身份认证 别人写的不过很透彻就转来了以后用时再看

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  7. 关于Asp.Net Forms身份认证

    Asp.Net管道式的构建个我们提供了通过IHttpMoudle来订阅管线事件来达到干预HTTP请求的目的,Asp.Net的身份认证正是通过此种方式来对请求来执行身份认证的,这篇文章仅仅谈论Forms ...

  8. 权限管理学习 一、ASP.NET Forms身份认证

    说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单实现登录.注销 以前在学习.net的时候不知道什么Forms ...

  9. ASP.NET Forms身份认证

    asp.net程序开发,用户根据角色访问对应页面以及功能. 项目结构如下图: 根目录 Web.config 代码: <?xml version="1.0" encoding= ...

随机推荐

  1. OpenStack控制节点上搭建Q版keystone服务(step3)

    keystone服务监听两个端口:5000和35357 一.安装和配置 1.安装keystone组件 yum install openstack-keystone httpd mod_wsgi -y ...

  2. MQTT研究之EMQ:【wireshark抓包分析】

    基于上篇博文[SSL双向验证]的环境基础,进行消息的具体梳理. 环境基础信息: . 单台Linux CentOS7.2系统,安装一个EMQTTD的实例broker. . emq的版本2.3.11. . ...

  3. python3-基础3

    列表 list[ ]  作用   --  存储多个值,多个元素 索引   list[num] 切片  list[:3] 追加  list.append('lalaal') 删除  list.pop() ...

  4. python基础知识14---迭代器、生成器、面向过程编程

    阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...

  5. Xorboot-UEFI新手入门教程

    Xorboot-UEFI新手入门教程        Xorboot-UEFI是一款UEFI下轻量级的图形化多系统引导程序,pauly于2014年国庆节期间发布了预览版.搜了下论坛,关于Xorboot- ...

  6. Ubuntu 15.10 下Tachyon安装

    1 系统环境 Ubuntu 15.10, Java 1.7, Hadoop 2.6.0 HA, Spark-1.4.0 三台机器 spark-1423-0001: Master, Worker spa ...

  7. EMQ消息队列初体验

    使用命令创建admin用户,密码123 emqx_ctl users add admin 配置规则/etc/emqx/acl.conf(除管理员,其他用户只能订阅限定的测试主题路径) %% 允许'ad ...

  8. servlet-response学习笔记

    为了给用户一个返回数据,我们需要使用HttpServletResponse 从相应对象获取一个输入流 通过输入流将返回结果写入到响应体中 关闭输入流 public class ResponseServ ...

  9. docker swarm 搭建与服务更新

    一,docker swarm 是什么 Docker Swarm.Docker Machine与Docker Compose号称Docker三剑客Docker Swarm 和 Docker Compos ...

  10. python网络爬虫学习笔记(二)BeautifulSoup库

    Beautiful Soup库也称为beautiful4库.bs4库,它可用于解析HTML/XML,并将所有文件.字符串转换为'utf-8'编码.HTML/XML文档是与“标签树一一对应的.具体地说, ...