具体代码如下: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拷贝出来,发现原来的COOKIE与30分钟以后的COOKIE值不同,我猜想可能是服务器判断客户端的COOKIE,然后就删除了服务器认为是错误的COOKIE文件(经过查看这个文件的确没有了),我需要重新输入名称和密码才能建立一个新的Cookie。可是我设置的保存1年,它为什么保存不住,是不是我缺少什么代码还是哪里有问题。已经搞了几个小时还是不灵,谢谢大家的帮助!

解决方案 »

  1.   

    有可能不是验证票没了,是存储验证票的session没了
      

  2.   

    存储验证票的session,为什么会没有,是什么原因导致的,我设置的是保存1年,没到期限为什么会自动删除。还有。
    经过我逐步调试发现。
    在30分钟后重新加载此页之前,原来的COOKIE还存在而且期限是2009年2月18日 0:00,也就是1年以后,但是加载后台管理页面以后,这个COOKIE突然消失了,所以我怀疑,应该是判断客户端的COOKIE值可能有问题,也可能是服务器端SESSION丢失导致的,然后就自动删除了这个COOKIE。我用CSDN这个社区,cookie保存一切正常,但是我自己的系统的确有问题,所以我觉得可能是我服务器端程序或者服务器的设置有问题,暂时不知道。还有一个要说明,我IIS中web园设置为1,是默认的,所以应该与它无关,请大家继续帮助。
      

  3.   

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

  4.   

    FormsAuthenticationTicket 设置为平滑过度 只要30分钟内有动作就不会掉线。
      

  5.   

    Cookie的有效期是一年,但是票据(FormsAuthenticationTicket)的有效期只有30分钟。
    30分钟以后,Cookie仍然在在,但是票据已经过期了,所以又要重新输入用户名与密码来登陆了。
    ===============
    正解!session 默认是 30分钟过期。
      

  6.   

    明白了,谢谢大家回答,那么怎么样能保存数据操作30分钟,比如一年。难道,采用微软的票据认证的forms的系统,都没有保存1年的功能吗?还是有什么别的变通的办法?