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