2011-12-29 12 views
5

Tengo una página donde un usuario inicia sesión en una aplicación de back-end a través de un servicio web. El servicio web devuelve una identificación de sesión que deseo almacenar en una cookie durante 40 minutos, ya que después de 40 minutos, la aplicación de back-end cierra automáticamente la sesión.Cookie C#: la propiedad expira no se configurará

Mi código para escribir la cookie:

private void SetCookie() 
{ 
    Response.Cookies.Add(new HttpCookie("Cookie_SessionID")); 
    Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID; 
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40); 

    //.... after a few more things 
    Response.Redirect(returnUrl); 
} 

A continuación, en la página de recepción tengo esto:

private HttpCookie GetCookie() 
{ 
    HttpCookie cookie = Request.Cookies["Cookie_SessionID"]; 
    if (cookie != null && cookie.Value != null) 
    {    
     return cookie; 
    } 
    return null;   
} 

Por alguna razón la cookie devuelta por GetCookie() siempre tiene un valor Expires de 0001-01-01 00:00:00, a pesar de que cuando veo las cookies en el navegador tiene el tiempo de caducidad correcto.

haber leído this que establece las galletas caducadas simplemente no se envían al servidor, supongo que lo que podría estar sucediendo es que la cookie está siendo escrito correctamente pero el navegador no es enviar la fecha de caducidad, puesto que en realidad es innecesaria ? ...

Mi problema es que quiero capturar precisamente eso: la cookie ha "caducado" y deben volver a iniciar sesión, pero necesito mostrar un mensaje del tipo "Sé que tienes Ya ha iniciado sesión, pero tendrá que volver a hacerlo "escriba algo".

Gracias

Respuesta

10

El navegador no enviará nada al servidor, excepto el nombre y el valor de la cookie. Todas las demás propiedades (caducidad, dominio, ruta, httponly, ...) no se pueden recuperar en las solicitudes una vez que se ha establecido la cookie.

Si desea mostrar un mensaje de este tipo, necesitará algún otro mecanismo para detectar que el usuario haya iniciado sesión. Puede establecer una cookie de presencia durante aproximadamente un año y verificar si existe.

La forma más aceptada de tratar con esto es redirigir al usuario a una página de inicio de sesión cuando intentan acceder a un recurso protegido y mostrar un mensaje como "Debe iniciar sesión para ver esta página. si ya has iniciado sesión, es posible que tu sesión haya expirado ".

(También tenga en cuenta que debe volver a configurar la cookie en cada solicitud, para que el usuario no se desconecte si continúan utilizando el sitio. No está claro en su código si lo está haciendo o no .)

3

El protocolo HTTP no envía las fechas de caducidad cookie al servidor.

Cuestiones relacionadas