设置/更新aspxauth和asp.net_sessionid cookie的到期时间

rus*_*sty 2 .net c# cookies asp.net-session .aspxauth

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

从我的角度来看,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);
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

我尝试在global.asax End_Request事件中执行此操作,尽管这似乎不是一个好地方,因为它每页触发几次,并且您无权访问sessionstate超时;此外,它仅在登录和注销时触发,因此基本上我可以设置一次,但永远无法更新。这将导致我的用户在登录后15分钟退出,即使他们一直处于活动状态。

似乎有些地方要告诉.net处理此问题?我知道这是一个奇怪的请求,但这是该项目的安全性要求,因此我正在尝试使其正常运行!

rus*_*sty 5

似乎没有多少人正在尝试做我正在做的事情,但是为了记录起见,我在应用程序最终请求中添加了代码,以在请求中找到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);
      }
  }
}
Run Code Online (Sandbox Code Playgroud)