在开发中,一般会遇到,用户一个角色,管理员一个角色的情况,而且每个角色的权限又不同.
这个就需要一个加密,安全的Cookies,而ASP.NET Form认证就提供了这个功能.
设置角色:
- FormsAuthentication.SetAuthCookie("Admin", true);//管理员角色
- FormsAuthentication.SetAuthCookie("User", true);//用户角色
- //true表示建立的是持久性的Cookies
重新设置Cookies,因为刚生成的Cookies只有角色信息,我们还需要存储用户的个人信息,比如:用户编号,用户昵称...
- HttpCookie cookies = null;
- cookies = FormsAuthentication.GetAuthCookie("Admin", true);//重构Admin的Cookies
- cookies = FormsAuthentication.GetAuthCookie("User", true);//重构User的Cookies
- //生成新的TICKET
- FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookies.Value);//对原有Cookies解密
- string userData = "更多用户个人信息";//设置更多用户个人信息
- FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(oldTicket.Version, oldTicket.Name, oldTicket.IssueDate, oldTicket.Expiration, oldTicket.IsPersistent, userData, oldTicket.CookiePath);
- string EncryptedValue = FormsAuthentication.Encrypt(newTicket);//对原有Cookies加密
- cookies.Value = EncryptedValue;
- Response.Cookies.Add(cookies);//将新生成Cookies添加到系统中
在其他页面访问是:
访问角色:
- string roleName = HttpContext.Current.User.Identity.Name;//Name就是角色信息
访问Cookies中的用户个人数据:
- string userInfos = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.UserData;
剩下就是Web.config里面的配置了:
- /*
- deny代表拒绝
- allow自然就是同意
- ?代表匿名
- *代表所有角色
- Admin就是管理员角色,名字可以自己定义
- User就是用户角色,名字可以自己定义
- path表示,你要用Form认证的文件路径
- */
- <location path="AdminLogin.aspx">
- <system.web>
- <authorization>
- <deny users="?"/>
- <deny users="*"/>
- <allow users="Admin"/>
- <allow users="User"/>
- </authorization>
- </system.web>
- </location>