2012-05-03 113 views
1

我想知道是否有一种方法可以设置.NET应用程序来设置和更新浏览器中aspxauth和asp.net_sessionid cookie的过期时间?在aspxauth和asp.net_sessionid cookies上设置/更新过期

根据我所看到的,cookie的过期日期与1/1/0001类似,告诉浏览器在浏览器关闭前保留它们(我已经使用Chrome观察过)。我想设置一个明确的时间,但是,我将需要在每次请求时更新那个时间。

我试图与像一些代码来做到这一点:

var timeoutMins = Session.Timeout; 
if (Response.Cookies.Count > 0) 
{ 
    foreach (string s in Response.Cookies.AllKeys) 
    { 
     if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid") 
     { 
      Response.Cookies[s].Expires = DateTime.Now.AddMinutes(timeoutMins); 
     } 
    } 
} 

我试图在Global.asax END_REQUEST事件这样做,虽然这似乎不是一个好地方,因为它闪光几次每页,你没有访问sessionstate超时;进一步它只在登录和注销触发,所以基本上我可以设置一次,但我永远不会更新它。这会导致我的用户在登录后15分钟内被注销,即使它们已被激活。

这似乎将有一些设置告诉.NET来处理这个?我知道这是一个奇怪的请求,但它是这个项目的安全要求,所以我试图让它工作!

回答

4

看起来不是很多人都在试图做我在做什么,但备案,我向应用程序结束请求添加了代码,以在请求中查找Cookie,并在响应中重新创建它们,并显示适当的过期时间:

var timeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["myTimeoutConfigSetting"]);  

foreach (var cookey in Request.Cookies.AllKeys) 
{ 
    if (cookey == FormsAuthentication.FormsCookieName || cookey.ToLower() == "asp.net_sessionid") 
    { 
     var reqCookie = Request.Cookies[cookey];          

     if (reqCookie != null) 
     { 
      HttpCookie respCookie = new HttpCookie(reqCookie.Name, reqCookie.Value); 
      respCookie.Expires = DateTime.Now.AddMinutes(timeout); 

      Response.Cookies.Set(respCookie); 
     } 
    } 
}