Establecer/actualizar la caducidad de las cookies aspxauth y asp.net_sessionid

Me pregunto si hay alguna manera de configurar su aplicación .NET para configurar y actualizar el tiempo de caducidad de las cookies aspxauth y asp.net_sessionid en el navegador.

Por lo que veo, las fechas de caducidad de las cookies son algo así como 1/1/0001 diciéndole al navegador que las conserve hasta que se cierre el navegador (he observado esto usando Chrome). Me gustaría establecer una hora explícita, pero tendré que actualizar esa hora en cada solicitud.

Estoy intentando hacer esto con un código como:

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);
       }
   }
}

Intenté hacer esto en el evento global.asax End_Request, aunque este no parece ser un buen lugar ya que se dispara varias veces por página y no tienes acceso al tiempo de espera del estado de la sesión; además, solo se activa al iniciar y cerrar sesión, por lo que básicamente puedo configurarlo una vez, pero nunca puedo actualizarlo. Esto hace que mis usuarios cierren sesión 15 minutos después de iniciar sesión, incluso si han estado activos.

¿Parece que habría alguna configuración en algún lugar para decirle a .net que maneje esto? Sé que esta es una solicitud extraña, pero es un requisito de seguridad en este proyecto, ¡así que estoy tratando de hacer que funcione!

preguntado el 03 de mayo de 12 a las 22:05

2 Respuestas

Parece que no mucha gente está tratando de hacer lo que estoy haciendo, pero para que conste, agregué código a la solicitud de finalización de la aplicación para encontrar las cookies en la solicitud y volver a crearlas en la respuesta con el tiempo de vencimiento adecuado:

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);
      }
  }
}

contestado el 07 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.