2011-11-09 71 views
5

我在website1.com下面的代碼:Cookie不能在IE中設置?

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

和website2.com包含:

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

當我在IE中打開網頁website2.com它提醒空字符串(如果沒有餅乾之前設置)。
其他瀏覽器提醒「qwe = 1」。

所以問題是爲什麼以及如何解決這個問題?

+1

header('P3P:CP =「CAO PSA OUR」'); – Sam152

回答

5

這是關於IE中的安全性。

如果你想允許訪問IFRAME餅乾,你應該設置HTTP標頭如下:

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

Cookies設置爲document.cookie,但是它們不會發送到服務器(因此在那裏沒有效果),直到下一頁加載。我假設document.cookie的標準行爲是模仿這一點,並且不更新讀取值直到下一頁面載入(換句話說,設置document.cookie設置cookie,但是讀取document.cookie給出在請求中發送的cookie)。

IE9修復了舊版本中存在的很多問題。我的意思是LOT。這很可能是其中之一。我想,解決方法是自己處理cookie。正如在PHP我具備的功能:

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

在JavaScript中,你可以創建你保持餅乾的跟蹤,包括當一個cookie設置等更新自身的對象。喜歡的東西:

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

那麼你可以設置一個cookie與cookies.set("qwe","1");cookies.read("qwe");讀回。