【问题标题】:Set / update expiration on aspxauth and asp.net_sessionid cookies设置/更新 aspxauth 和 asp.net_sessionid cookie 的过期时间
【发布时间】:2012-05-13 10:42:51
【问题描述】:

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

据我所知,cookie 的到期日期类似于 0001 年 1 月 1 日,告诉浏览器保留它们直到浏览器关闭(我使用 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 来处理这个问题?我知道这是一个奇怪的请求,但这是这个项目的安全要求,所以我正在努力让它发挥作用!

【问题讨论】:

    标签: c# .net cookies asp.net-session .aspxauth


    【解决方案1】:

    看起来没有多少人在尝试做我正在做的事情,但为了记录,我在应用程序端请求中添加了代码,以在请求中查找 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);
          }
      }
    }
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2012-05-19
      • 2017-02-20
      • 2013-12-02
      • 1970-01-01
      • 2014-11-15
      • 2012-06-03
      • 1970-01-01
      • 2013-05-01
      • 2011-12-17
      相关资源
      最近更新 更多