配置,配置mode="Forms",其他属性详见 MSDN(点我直接查看各authentication属性)

<configuration>
<system.web>
<authentication mode="Forms">
<forms name="cookiename" loginUrl="/home/login" defaultUrl="/" timeout="" path = "/">
</forms>
</authentication>
</system.web>
</configuration>

登录,有两种方法,二选一即可,两者效果是一致的,后者可以带自定义数据(比如可以放用户角色)。

[AllowAnonymous]
[HttpPost]
public ActionResult Login(string username,string password)
{ //方法1,方便快捷
FormsAuthentication.SetAuthCookie(username, false); //方法2,可以带自定义数据
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(, username, DateTime.Now, DateTime.Now.AddDays(), true, "自定义数据","/");
string hashTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
cookie.HttpOnly = true;
Response.Cookies.Add(cookie); //重定向至原始请求URL上
string returnUrl = FormsAuthentication.GetRedirectUrl(username, false);
if (!string.IsNullOrEmpty(returnUrl))
{
Response.Redirect(returnUrl);
}
return View("Index");
}

登录信息,在Login()方法中的username可以在HttpContext.User.Identity.Name获取,而自定义数据则是存在Cookie中的,想要获取自定义数据则事先需要将cookie里保存的值解密成认证票据, FormsAuthenticationTicket.UserData 属性便是我们想要的自定义数据。

[Authorize]
public ActionResult UserInfo()
{
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = HttpContext.Request.Cookies[cookieName];
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch (Exception ex)
{ }
ViewData["UserName"] = HttpContext.User.Identity.Name;
ViewData["UserRole"] = authTicket.UserData; return View();
}

退出登录,一句SingOut()即可。

[HttpPost]
public ActionResult Logout()
{
FormsAuthentication.SignOut();
return View("Index");
}

一个奇怪的现象,我折腾了一个晚上始终没能成功登录(ASP.NET MVC5),总是在 var cookie =  HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName] 这一步出了问题,总是出现 cookie==null ,而HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName].Value !=null 的现象。最后清了下浏览器缓存......问题消失了.......

FormsAuthentication实现比较简单,无法满足复杂身份认证业务的需求,这里仅作为我个人的学习记录、知识储备目录。

参考引用

基于FormsAuthentication的用户、角色身份认证:https://blog.csdn.net/lenovouser/article/details/53197603

Asp.Net MVC 身份验证-Forms : https://www.cnblogs.com/JoeSnail/p/8250231.html

经典FormsAuthenticationTicket 分析 :https://blog.csdn.net/wdbs_05/article/details/73737725

总结FormsAuthentication的使用 : https://www.cnblogs.com/ShaYeBlog/p/6268206.html

.Net MVC 身份验证 :https://www.cnblogs.com/wwj1992/p/8196131.html

记录FormsAuthentication的使用方法的更多相关文章

  1. SQL Server 数据库查找重复记录的几种方法

    http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...

  2. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  3. PHP获取MySql新增记录ID值的方法

    今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法 ...

  4. java中的List记录是否完全匹配方法

    今天要说的是给List分组,然后用Map来封装,可能你看了以后还是有一些模糊. 先看一下项目结构图: User类是一个VO类,主要逻辑还是在MapTestBak上面. 运行效果: 原理图: 1.在st ...

  5. Apache日志不记录图片文件设置方法和来源日志的配置

    Apache日志不记录图片文件设置方法 <FilesMatch "\.(ico|gif|jpg|swf)">SetEnv IMAG 1</FilesMatch&g ...

  6. Nginx正确记录post日志的方法

    Nginx正确记录post日志的方法 事实上可以很简单,这取决于把 access_log 放在哪个 location 里面. 一,放到包含fastcgi_pass或proxy_pass的Locatio ...

  7. spring+hibernate删除单条记录的几种方法

    spring+hibernate删除单条记录的几种方法

  8. Linux实战案例(4)CentOS清除用户登录记录和命令历史方法

    CentOS清除用户登录记录和命令历史方法 清除登陆系统成功的记录[root@localhost root]# echo > /var/log/wtmp //此文件默认打开时乱码,可查到ip等信 ...

  9. oracle中查找和删除重复记录的几种方法总结

    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...

随机推荐

  1. JAVA 框架 Spring Cache For Redis.

    一.概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的. 常用的缓存数据库: Redis   使用内存存储(in-memory)的非关系数据库,字符串.列 ...

  2. 二叉树的最大/小/平衡 深度 depth of binary tree

    [抄题]: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. [思维问题]: [一句话思路]: 分合法的定义 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况 ...

  3. 在java工程中导入jar包的注意事项

    在java工程中导入jar包后一定要bulid path,不然jar包不可以用.而在java web工程中导入jar包后可以不builld path,但最好builld path.

  4. Navicat Premium 12破解补丁

    Navicat Premium 12破解补丁是专门针对Navicat 12制作的一款破解工具,它可以帮助大家成功激活软件,激活后就可以免费使用软件所有功能了,小编亲测可用,有需要的可以下载试试. Na ...

  5. vue小常识小注意

    1,跨域携带cookie,加一个拦截器,能后加上request.credentials=true就可以了 Vue.http.interceptors.push(function(request, ne ...

  6. 在探http请求

    参考:https://itbilu.com/other/relate/Ny2IWC3N-.html Cookie和Session都是为了解决HTTP协议的无状态问题,存储HTTP通讯中客户端与服务器之 ...

  7. 3. Install Spring-Tool-Suite & TestNG

    1.Install Spring-Tool-Suite 2.Install TestNG

  8. 【commons-io】File对文件与目录的处理&FileUtis,IOUtils,FilenameUtils工具的使用

    -------------------File的使用-------------- 1.File类对文件的处理 1.1目录结构:  1.2测试对文件Test.txt处理: // 测试文件 @Test p ...

  9. 2018.08.20 bzoj1143: [CTSC2008]祭祀river(最长反链)

    传送门 一道简单的求最长反链. 反链简单来说就是一个点集,里面任选两个点u,v都保证从u出发到不了v且v出发到不了u. 链简单来说就是一个点集,里面任选两个点u,v都保证从u出发可以到达v或者v出发可 ...

  10. S4 exercise -- 模块

    写一个用户登录验证程序,文件如下1234.json {"expire_date": "2021-01-01", "id": 1234, &q ...