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);

猜你喜欢

转载自blog.csdn.net/ryancao530/article/details/112370251
今日推荐