como - eliminar cookies c#
¿Por qué no puedo eliminar esta cookie? (8)
De acuerdo, aquí está el 411 - Tengo el siguiente controlador de eventos en mi archivo Global.asax.cs:
private void Global_PostRequestHandlerExecute(object sender, EventArgs e)
{
if (/* logic that determines that this is an ajax call */)
{
// we want to set a cookie
Response.Cookies.Add(new HttpCookie("MyCookie", "true"));
}
}
Ese controlador se ejecutará durante las solicitudes Ajax (como resultado del framework Ajax que estoy usando), así como en otros momentos: la condición de la instrucción if filtra los eventos que no son Ajax, y funciona bien (no es relevante aquí, así que no lo incluí en aras de la brevedad).
Basta con decir que esto funciona bien: la cookie está configurada, puedo leerla en el cliente y todo está bien hasta ese momento.
Ahora la parte que me vuelve loco.
Aquí está la función de JavaScript que estoy usando para eliminar la cookie:
function deleteCookie(name) {
var cookieDate = new Date();
cookieDate.setTime(cookieDate.getTime() - 1);
document.cookie = (name + "=; expires=" + cookieDate.toGMTString());
}
Así que, por supuesto, en algún momento después de que la cookie está configurada, la elimino así:
deleteCookie("MyCookie");
Solo que eso no hace el trabajo; la cookie todavía existe Entonces, ¿alguien sabe por qué?
¿Has intentado usar "; expires = Thu, 01-ene-1970 00:00:01 GMT"?
Publiqué una cookie js util hace una semana en mi blog . Esto me ha funcionado en todos los navegadores de "A Grade".
var CookieUtil = {
createCookie:function(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
},
readCookie:function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split('';'');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)=='' '') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
},
eraseCookie:function(name) {
createCookie(name,"",-1);
}
};
Raro .. El código que pegaste es casi textual a esto: http://www.quirksmode.org/js/cookies.html que funciona bien ...
Sé que estás usando Ajax, pero ¿has intentado rápidamente llamar al código del servidor para ver si funciona ? Esto puede ayudar a determinar si se trata de un problema con JS o alguna otra cosa (por ejemplo, bloqueo misterioso de archivos en la cookie).
Actualizar
Acabo de tener un Google rápido, parece que también puede haber problemas con la configuración del navegador. No creo que su problema sea el código aquí, es más probable que sea otra cosa. Sugiero probar lo anterior como PoC y podemos movernos desde allí. :)
- ¿Ha revisado los dominios y rutas de cookies del lado del cliente y del lado del servidor para asegurarse de que son los mismos?
- ¿Una cookie es segura y la otra no?
- Aparte de eso, sospecho que hay problemas de sincronización del reloj del servidor / cliente, como sugiere Erlend.
¿Estamos seguros de que no hay un código que establezca la Cookie en HttpOnly (no nos falta nada)? La propiedad HttpOnly impedirá que los navegadores (modernos) modifiquen la cookie. Me interesaría ver si puedes matarlo del lado del servidor como sugiere Rob.
Supongo que está llamando a este javascript en el lado del navegador. ¿Qué navegador estás usando, cómo estás viendo la cookie para confirmar que todavía está allí?
debe eliminar su cookie en la misma ruta donde la creó. así que crea tu cookie con path = / y delte it con path = / también ...
Además, si se especificó un dominio de cookies durante la creación, he encontrado que también debe especificar el dominio de cookies al intentar eliminarlo (expirar).