首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2012-06-09 
采用asp.net 的forms认证,采用身份验证票验证登录,怎么样能设置保存期为1年。1年之内不用登录直接进入后台

采用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, "/");



第四个参数为过时时间, 你设定了三十分钟过期, 当然不可能一年了

除此之外, 第五个参数应该为true, 当为真时表示将相关数据存储按照规定时间存储在cookies中

你试一下, 如果行的话就给我加分, 或者加我QQ 343397317一起交流
[解决办法]
使用票据是可以实现的。
FormsAuthenticationTicket的构造函数中:
public FormsAuthenticationTicket (
int version,
string name,
DateTime issueDate,
DateTime expiration,
bool isPersistent, //注意这个参数:如果票证将存储在持久性 Cookie(跨浏览器会话保存),则为 true;否则为 false。如果该票证存储在 URL 中,将忽略此值。


string userData
)
把isPersistent设置成true就可以了。


同时,FormsAuthentication有个方法:
public static void SetAuthCookie (string userName, bool createPersistentCookie)
参数:createPersistentCookie若要创建持久 Cookie(跨浏览器会话保存的 Cookie),则为 true;否则为 false



[解决办法]
感觉是switch (CookieType)的问题,中间的代码没有执行。在这代码之前加上这句试试
int CookieType=4;
[解决办法]
暂时知道的原因
Cookie的有效期是一年,但是票据(FormsAuthenticationTicket)的有效期只有30分钟。
30分钟以后,Cookie仍然在在,但是票据已经过期了,所以又要重新输入用户名与密码来登陆了。 
---------------------------------------------------
cookie过不过期跟票据的有效期无关,它的默认值也是30分钟
[解决办法]
你先把改成一分钟,不就可以验证了,还非要30分钟?呵呵!
[解决办法]
很明显 FormsAuthenticationTicket () 构造函数的参数错了...呵呵
[解决办法]
使用Response.Cookies.Add(new HttpCookie([cookice名称], [加密后的票据名称]));将票据保存到cookice上去

热点排行