ASP.Net MVC FormsAuthentication身份校验

ASP.Net MVC FormsAuthentication身份校验

1.IsAuthenticated验证方法

当我们用Forms认证方式的时候,可以使用HttpContext.Current.User.Identity.IsAuthenticated 来判断是否登陆;而这个判断就是依赖于这个Cookie里的信息判断用户是否登陆。
FormsAuthentication.SignOut用来清除这个Cookie标记。

在这里插入代码片 public class AuthenticationFilterAttribute : ActionFilterAttribute, IAuthenticationFilter
{
    public void OnAuthentication(AuthenticationContext filterContext)
    {           
        if (filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            FormsIdentity id = filterContext.HttpContext.User.Identity as FormsIdentity;
            var ticket = id.Ticket;
            var userInfo = id.Ticket.UserData;
            var userName = id.Ticket.Name;
        }
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        
    }
}

2.Web.Config设置

Web.Config设置是使用FormsAuthentication的前提

<authentication mode="Forms">
	<forms/>
</authentication> 

3.FormsAuthenticationTicket

构造函数:

// 摘要:
//     新实例初始化 System.Web.Security.FormsAuthenticationTicket cookie 名称、 版本、 目录路径、 发货日期、
//     到期日期、 持久性和用户定义数据类。
//
// 参数:
//   version:
//     票证的版本号。
//
//   name:
//     与票证关联的用户名。
//
//   issueDate:
//     本地日期和时间所颁发票证。
//
//   expiration:
//     本地日期和票证的到期的时间。
//
//   isPersistent:
//     true 如果该票证将存储在持久性 cookie (保存在浏览器会话);,否则为 false。 如果该票证存储在 URL 中,则忽略此值。
//
//   userData:
//     要存储在票证的特定于用户的数据。
//
//   cookiePath:
//     票证存储在 cookie 中时的路径。
public FormsAuthenticationTicket(string name, bool isPersistent, int timeout);
public FormsAuthenticationTicket(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData);
public FormsAuthenticationTicket(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData, string cookiePath);

示例:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    2,//默认版本号为2
   	userName,//登录的用户名,
    DateTime.Now,//注册时间
    DateTime.Now.AddSeconds(30),//注册过期时间
    false,//不是Persistent
    userData);

string encryptTicket = FormsAuthentication.Encrypt(ticket);

//创建Cookie的名称必须是FormsAuthentication.FormsCookieName,否则无效
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptTicket)
{
    HttpOnly = true,
	
	//Cookie过期与注册过期都会导致IsAuthentication = false
    Expires = DateTime.Now.AddMinutes(2)
};
Response.Cookies.Add(cookie);

4.FormsAuthentication.SetAuthCookie

构造函数:

public static void SetAuthCookie(string userName, bool createPersistentCookie, string strCookiePath);       
public static void SetAuthCookie(string userName, bool createPersistentCookie);

通过构造函数看出,FormsAuthentication.SetAuthCookie是相对简单快捷的写法,无需在手动创建Cookie,相关的Cookie参数更多的依赖Web.Config中的设置

<authentication mode="Forms">
	<forms name="Example" cookieless="UseCookies" protection="All" timeout="30" loginUrl="~/Controllers/Register/Submit" defaultUrl="~/" path="/" enableCrossAppRedirects="false"></forms>
</authentication>

在这里插入图片描述

FormsAuthentication.SetAuthCookie(userName, true);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值