2011-11-09 12 views
5

he el siguiente código en website1.com:Las cookies no se pueden configurar en IE?

<script type="text/javascript"> 
    document.cookie = "qwe=1"; 
    alert(document.cookie); 
</script> 

y website2.com contiene:

<iframe src="http://website1.com"></iframe> 

Al abrir la página en IE website2.com Alerta cadena vacía (si no hay galletas fue establecido antes).
Otros navegadores alertan "qwe = 1".

Entonces, la pregunta es ¿por qué y cómo solucionar esto?

+1

header ('P3P: CP = "CAO PSA NUESTRO' '); – Sam152

Respuesta

5

Se trata de seguridad en IE.

Si desea permitir el acceso a las cookies en IFRAME, debe establecer la cabecera HTTP de la siguiente manera:

ASP.NET:

HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""); 

JSP:

response.addHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"") 

PHP:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
1

Las cookies se establecen con document.cookie, sin embargo, no se envían al servidor (y por lo tanto no tienen efecto allí) hasta la próxima carga de página. Supongo que el comportamiento estándar de document.cookie es imitar esto y no actualizar el valor de lectura hasta la próxima carga de página (en otras palabras, establecer document.cookie establece una cookie, pero al leer document.cookie se muestran las cookies que se enviaron en la solicitud).

IE9 solucionó un montón de problemas presentes en versiones anteriores. Y me refiero a un LOTE. Es muy probable que sea uno de ellos. La solución alternativa, me imagino, es el manejo de las cookies usted mismo. Al igual que en PHP tengo la función:

<?php 
function setRealCookie(...) { 
    setcookie(...); 
    $_COOKIE[...] = ...; 
} 
?> 

En JavaScript se puede crear un objeto que realiza un seguimiento de las cookies para usted, incluyendo la actualización de sí mismo cuando una cookie se establece y así sucesivamente. Algo así como:

(cookies = { 
    data: {}, 
    init: function() { 
     var c = document.cookie.split(";"), l = c.length, i, t; 
     for(i=0; i<l; i++) { 
      t = c[i].split("="); 
      cookies.data[t.shift()] = t.join("="); 
     } 
    }, 
    read: function(key) { 
     return cookies.data[key]; 
    }, 
    set: function(key,value) { 
     document.cookie = key+"="+value; 
     cookies.data[key] = value; 
    } 
}).init(); 

entonces se puede establecer una cookie con cookies.set("qwe","1"); y leer de nuevo con cookies.read("qwe");.

Cuestiones relacionadas