0

「www.domain.local」と「api.domain.local」の 2 つのサーバーがあります。wwwから呼び出されるAPIサーバーのスクリプトにCookieを設定したい。Chromeではそれができません(他のブラウザはまだ試していません)

私のPHPコード:

header("Access-Control-Allow-Origin:*");
echo json_encode(array("cookie"=>print_r($_COOKIE,true)));
setcookie("test","ok",time()+24000*3600,"/",".domain.local");

私のjQueryで:

$.getJSON("http://api.domain.local/test.php",{
  command:"setcookie"
},function(fb){
  alert(fb.cookie);
});

PHP は最初に持っている Cookie を返します。最初の実行では、これはゼロになるはずです。PHP スクリプトのヘッダーには、次のように表示されます。

セット Cookie:test=ok; 有効期限=2015 年 10 月 27 日火曜日 22:52:52 GMT; パス=/; domain=.domain.local X-Powered-By:PHP/5.3.14

これは私が期待するものです。ただし、Cookie は設定されていません。jQuery を再度実行すると、Cookie が設定されることを期待しています ($_COOKIE の print_r でアラートが表示されます) が、何も表示されません。Chrome のデバッグ部分にあるネットワーク リソースの [Cookie] タブで気づいたことの 1 つは、有効期限が「無効な日付」として設定されていることです。PHPスクリプトを直接実行すると、この問題は発生しません。

jQuery から呼び出された PHP スクリプトで Cookie を設定することは可能ですか?

4

2 に答える 2

2

見てみましょう、ページがロードされているドメインとは異なるドメインにCookieを設定し、jQueryからPHPに設定します

誰かがあなたのやり方を投稿するかもしれません。私はただカンニングするかもしれません。

www.domain.local/test.htmlが含まれています

$.getScript("http://api.domain.local/test.php?dowhat=setcookie");

api.domain.local/test.php

<?php
switch ($_GET['dowhat']){
    case 'showcookie':
        print_r($_COOKIE);
        break;
    case 'setcookie':
        setcookie("test",date('Y m D H:i:s'),time()+24000*3600,"/");
        break;
}
header("Content-type: application/javascript"); // may as well, it expects this
die;

http://api.domain.local/test.php?dowhat=showcookieにアクセスします。

Array ([test] => 2013 01 Thu 00:20:52 ) 

タダ!

PS 誰かが不正行為をすることなく設定する必要がある場合は、単純にこれを行うことはお勧めしません。

于 2013-01-31T00:22:28.363 に答える
0

コードに問題があるようです。最初の行で、文字列を。で閉じるのを忘れました"

于 2013-01-30T23:18:37.483 に答える