基于角色的Form验证登录一会儿后,要求重新登录.找不到原因.大家帮帮我啊...帮顶有分喔!!!!!!!
代码
Login.aspx.cs:
如果用户名密码正确:
//设置登陆信息
string Role="Administrator";//角色:管理员
//建立role-based认证票据
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,Name,DateTime.Now,DateTime.Now.AddMinutes(120),true,Role);
//修改票据cookie,使其加密(本质是写入一个与票据cookie同名的新cookie)
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);
//cookie的有效时间
authCookie.Expires = DateTime.Now.AddMinutes(120);
Response.Cookies.Add(authCookie);
cookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookie);
string url = FormsAuthentication.GetRedirectUrl(Name,false);
if(url.ToLower().IndexOf("default.aspx") > 0)
{
url = "setup.aspx";
}
Response.Redirect(url);
web.config:
<authentication mode="Forms">
<forms name="Chris.Flower" loginUrl="Admin/Login.aspx" protection="All" timeout="30" path="/" />
</authentication>
<authorization>
<allow users="*" />
</authorization>
<location path="Admin">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
Global.asax.cs:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if(HttpContext.Current.User != null)//如果当前的http信息中存在用户信息
{
if(HttpContext.Current.User.Identity.IsAuthenticated)//如果当前用户的身份已经通过了验证
{
if(HttpContext.Current.User.Identity is FormsIdentity)
{
//如果当前用户身份是FormsIdentity类即窗体验证类,此类有个属性能够访问当前用户的验证票
FormsIdentity fi = (FormsIdentity)HttpContext.Current.User.Identity;//创建个FormsIdentity类,用他来访问当前用户的验证票
//获得用户的验证票
FormsAuthenticationTicket ticket = fi.Ticket;
//从验证票中获得用户数据也就是角色数据
string userData = ticket.UserData;
//把用户数据用|分解成角色数组
string[] roles = userData.Split('|');
//重写当前用户信息,就是把角色信息也加入到用户信息中
HttpContext.Current.User = new GenericPrincipal(fi,roles);
}
}
}
}
PS:Login页面,那两个设置时间的地方一直没弄明白怎么回事.还有web.config文件那里也有一个.
问题就是登录一会儿后,要求重新登录.要求是:登录后,只要浏览器不关,则不会超时(如果做不到,可以定时刷新).关闭浏览器,就要求登录.