日期:2014-05-17  浏览次数:20464 次

采用asp.net 的forms认证,采用身份验证票验证登录,怎么样能设置保存期为1年。1年之内不用登录直接进入后台
具体代码如下: 

web.config文件 

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" loginUrl="/login.aspx" timeout="30" path= "/"> </forms> 
</authentication> 

login.aspx.cs文件 

string userRoles = "member" 
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/"); //建立身份验证票对象 
string HashTicket = FormsAuthentication.Encrypt(Ticket); //加密序列化验证票为字符串 
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);//生成Cookie 
//根据选择Cookie的类型得到过期时间,0为不保存,1为保存1天,2为保存1个月,3为保存1年,4为永久保存我设为99年一般足够了 
switch (CookieType) 

  case 0: 
  break; 
  case 1: 
  UserCookie.Expires =DateTime.Now.AddDays(1); 
  break; 
  case 2: 
  UserCookie.Expires = DateTime.Now.AddMonths(1); 
  break; 
  case 3: 
  UserCookie.Expires = DateTime.Now.AddYears(1); 
  break; 
  case 4: 
  UserCookie.Expires = DateTime.Now.AddYears(99); 
  break; 
  default: 
  break; 

//生成Cookie 
HttpContext.Current.Response.Cookies.Add(UserCookie); //输出Cookie 
HttpContext.Current.Response.Redirect(Context.Request["ReturnUrl"]); // 重定向到用户申请的初始页面  

global.asax文件 

protected void Application_AuthorizeRequest(object sender, System.EventArgs e) 

  HttpApplication App = (HttpApplication)sender; 
  HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象 
  if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理 
  { 
  FormsIdentity Id = (FormsIdentity)Ctx.User.Identity; 
  FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票 
  string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组 
  Ctx.User = new GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息 
  } 


举个例子: 
我设置的都是保留1年,而且产生的COOKIE文件经过查看,的确是2009年的日期,在30分钟之内,都可以登录,无论我电脑重启、服务器重启都可以登录到后台,但是为什么30分钟以后我在登录就不好使,让我重新输入登录的名称和密码。 

暂时知道的原因
Cookie的有效期是一年,但是票据(FormsAuthenticationTicket)的有效期只有30分钟。 
30分钟以后,Cookie仍然在在,但是票据已经过期了,所以又要重新输入用户名与密码来登陆了。

怎么设置或者怎么编程让登录信息保存期为1年。1年之内不用登录的麻烦直接进入后台。

非常感谢各位帮忙!


------解决方案--------------------
学习
------解决方案--------------------
支持
------解决方案--------------------
怎么样能设置保存期为1年。1年之内不用登录直接进入后台
-----------------------------------------------
我很想说lz为什么不用cookie,把信息存到用户本地,用MD5加密,CSDN上的2周不用登录功能,就是用Cookie


------解决方案--------------------
对于这段代码, 
new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/");