引用 using System.Web.Security;
FormsAuthenticationTicket ticket=new FormsAuthenticationTicket(1,UserName,DateTime.Now, DateTime.Now.AddHours(4), false, user.RoleName, "/");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.HttpOnly = true;//可以防止浏览器攻击窃取、伪造Cookie,但是客户端js无法读取到这个Cookie
Response.Cookies.Add(cookie);
将信息存储在cookie中。
从cookie中读取姓名和角色
var cookies = Request.Cookies[FormsAuthentication.FormsCookieName];
var tickets = FormsAuthentication.Decrypt(cookies.Value);
string role = tickets.UserData;
string[] ss = role.Split(',');
string name = User.Identity.Name;
P.S. :1、Ticket存储在在Cookie过期时间,和关闭浏览器是否在记住当前票据,在FormsAuthenticationTicket实例化时候可以设置参数,
2、Role 的获取可以不要存储在ticket 的userData中,可以直接从数据库读取,userData可以存储其他信息。
3、要想灵活配置Controller 和Action的 允许访问的Role 可以自定义AuthorizeAttribute override里面的OnAuthorization方法,在该方法中
读取当前页面允许访问的角色ID,根据当前用户的RoleID,进行检查。这样也就实现了,Role的灵活配置。
4、Ticket中的信息,最终还是存储在cookie中,安全性方面还是自己斟酌吧,个人觉得还是把UserID和RoleID存储在Session中的比较好。