Pregunta

Estoy creando un HTTPCOOKIE, configurando solo el nombre y el valor y no la propiedad de caducidad, luego agregándolo a la respuesta. Suficientemente simple. La cookie se crea (pero no persistió) como se esperaba. El problema es cuando la sesión cambia por alguna razón (como se reconstruyó el sitio web, o reconstruí mi aplicación cuando se depura), la cookie permanece alrededor. Quiero que la cookie sea válida para solo la sesión original en la que se creó.

Según MSDN, dice: "Si no especifica un límite de caducidad para la cookie, la cookie no está persistida en la computadora cliente y caduca cuando la sesión del usuario expira".

Supongo que no sé exactamente qué "Expira la sesión" abarca. Me imagino que la cookie se elimina después de 20 minutos cuando la sesión expira. ¿Pero en caso de que la cookie se elimine si se creó la sesión en la que se creó, no existe por cualquier número de razones? La única vez que he visto a la cookie se elimina es cuando el usuario cierra todas las ventanas del navegador y se abre una nueva.

Si todo esto es cierto, es posible que tenga que almacenar el ID de sesión original ("ASP.NET_Sessionid") en la cookie, luego verifíquelo contra la ID de sesión actual, si son diferentes, luego elimine la cookie o cree uno nuevo.

Aquí está el código (la única diferencia entre mi cookie y la de los ejemplos de MSDN es que estoy almacenando varios valores en la cookie):

private void SaveValuesToCookie(string[] names, string[] values)
{
    HttpCookie cookie = new HttpCookie("MyCookie");

    for (int i = 0; i < names.Length; i++)
    {
        string name = names[i];
        cookie.Values[name] = values[i];
    }
    Response.Cookies.Add(cookie);
}

private string GetValueFromCookie(string name)
{
    HttpCookie cookie = Request.Cookies["MyCookie"];
    if (cookie == null)
        return null;

    return cookie.Values[name];
}

¿Fue útil?

Solución

La única vez que he visto a la cookie. Eliminado es cuando el usuario cierra todo Ventanas del navegador y se abre una nueva.

Y eso es exactamente lo que significa MSDN cuando dice que la cookie se eliminará cuando la sesión expire. Desafortunadamente, creo que esto no es consistente en todos los navegadores de todos modos, por lo que no se puede usar mucho para nadie.

Siempre debe establecer una fecha de vencimiento en las cookies.

Si esto es todo cierto, es posible que tenga que almacenar la identificación de sesión original ("Asp.net_sessionid") en la cookie, Luego revíselo contra la corriente ID de sesión, si son diferentes, entonces Eliminar la cookie o crear una nueva.

Odio decirlo, pero esto tampoco te va a ayudar. El Framework .NET le gusta reciclar las ID de sesión, por lo que no puede garantizar que sea diferente.

Malas noticias fuera del camino, le aconsejaría que reconsidere lo que está tratando de hacer desde un punto de vista arquitectónico.

Reiniciar la aplicación es algo que ocurre completamente en el servidor; Las cookies son algo que ocurre completamente en el cliente. Si bien el cliente hablará con el servidor, es una relación puramente de solicitud / respuesta, el servidor no puede comunicar eventos, como reiniciar una aplicación al navegador.

Si desea almacenar un valor en algún lugar que solo es válido para la vida útil de una sesión de servidor, ¿por qué no almacenarlo en sesión en lugar de en una cookie?

Otros consejos

Soy consciente de todo eso, pero no es lo suficientemente seguro para las necesidades de nuestros clientes.La sesión aún puede ser falsificada o inyectada.Ver: http://msdn.microsoft.com/en-us/Revista / CC163730.ASPX # S9

Parece que me queda a crear una cookie segura caducada separada de la sesión, y actualizar la fecha de vencimiento cuando puedo (es decir, cuando el usuario accede a ciertas páginas).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top