2012-05-03 145 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); 
     } 
    } 
}