2011-11-09 6 views
5

私はwebsite1.comに次のコードを持っている:IEではCookieを設定できません。

<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

ヘッダー( '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

クッキーはdocument.cookieと設定されていますが、次のページロードまではサーバーに送信されないため、効果がありません。 document.cookieの標準的な動作はこれを模倣し、次のページロードまで読み込み値を更新しないと仮定します(つまり、document.cookieを設定するとCookieを設定しますが、document.cookieを読むと要求で送信されたCookieが得られます)。

IE9では、古いバージョンの問題が多数修正されています。そして私は、LOTを意味します。これはおそらくその1つです。回避策は、私が想像するには、自分でクッキーを処理しています。あなたはクッキーがそのように設定されたときに自分自身を更新するなど、あなたのためのクッキーを追跡し、オブジェクトを作成することができ

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

JavaScriptでは:ちょうどPHPのように私は機能を持っています。ような何か:

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

次にあなたがcookies.set("qwe","1");でクッキーを設定し、cookies.read("qwe");でそれを読み戻すことができます。