6

ユーザーが私のサイトで CNAME レコードを指定して「プロファイル」を実行できるようにするサイトを構築しています。これにより、自分のドメイン名が私のサイトにプロファイルをロードできるようになります。

これにより、セッションに関連するあらゆる種類の問題が発生しています。私はvirbがそれを行うのを見てきました。iFrame のセッション ベースの情報は表示されませんが、ページに iFrame が存在します。

ドメインを機能させることができますが、セッションデータを失うだけです...何かアイデアはありますか?

(ここに例があります -- Virb へのリンク -- http://www.agentspider.com/ )

4

4 に答える 4

5

デフォルトでは、Cookie クロス ドメインを設定できません。P3P ファイルを設定して有効にできると思います。http://p3ptoolbox.org/guide/section4.shtml#IVd 私はこれを自分で行ったことがないので、どれだけのブラウザーがそれを実装しているか、またはそのように機能するかどうかさえわかりません。

Virb は JavaScript を使用しているように見えます。セッション Cookie が設定されていない場合に、virb サーバーにJSON-P要求を行う AJAX ライブラリがあります。(Firefox の最初の読み込み、Firebug で確認できます) JSON 応答は、ユーザーがログインしているかどうかをページに通知し、ユーザーの状態を反映する必要があるページの部分を更新します。

つまり、ページには virb.com の JS が埋め込まれています。ドメインは virb.com であるため、virb.com に設定された Cookie がサーバーに送信されます。次に、サーバーは Cookie の結果を外部サイトに返します。

JS がないとうまく動かない virb の場合は、良い選択肢だと思います。ただし、HTTP リダイレクトでも同じことができます。

HTTP ホストがメイン ドメイン (example.com) でない場合:

if (!$_COOKIE['sessionid'] && $_SERVER['HTTP_HOST'] != 'example.com') {
// redirect to your main site
header('Location: http://example.com');
}

メイン サイトで Cookie を設定し、ユーザーを外部ドメイン (domain.com) に送り返して、場所にセッション ID を渡します。

header('Location: http://domain.com.com?sessid='.urlencode($_COOKIE['sessionid']));

最後のビットは、同じセッションが進行中なので、現在表示していたページにリダイレクトすることです。

setCookie(...); // sessid in $_GET['sessid']
header('Location: http://domain.com/'); 

実際には、最初のステップで現在表示しているページを example.com に戻すことができるので、後でリダイレクトして戻すことができます。

ヘッダーを使用しているだけで (コンテンツを出力する必要はありません)、ほとんどの場合 HTTP/1.1 を使用しているため、同じ TCP ソケットを使用することになります。これは非常に効率的であり、JavaScript オプションよりもサポートされると思います。

編集: 外部ドメインに戻ったときに Cookie を設定することを忘れないでください。

最後のステップはオプションですが、sessid が URL に含まれないようにします。これは、HTTPヘッダーに保持するよりもセキュリティ上の問題です。

于 2009-08-27T11:37:06.033 に答える
4

唯一の方法は、あるドメインから別のドメインに移動する url-s にセッション id-s を追加 (またはそのセッション id を iframe src url に追加) し、これを処理するようにセッション ストレージ バックエンドをコーディングすることです。

もちろん、このアプローチがもたらすすべてのセキュリティ問題を考慮する必要があります。

于 2009-08-27T10:30:56.403 に答える
1

次のような単純なものはありません。

1) ソースで domain1.com/client.html を作成します。

<script type="text/javascript" src="domain2.com/server_set_cookie.php"></script> 2) php ソースで domain2.com/server_set_cookie.php を作成します。

header("p3p: CP=ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV");

setcookie($_REQUEST['cookie_name'], 'cookie_name', time()+3600);

http://smartcoding.wordpress.com/2009/07/12/setcookie-cross-domain-cookie-write/

于 2011-07-25T13:10:10.850 に答える
0

あなたの問題を理解しているかどうかわかりません。www.userprofiles.com/profile.php?userid=1 のようなものを呼び出して結果を表示する別のドメインのようなものですか? この場合、profile.php は呼び出されるたびに新しいセッション ID を生成します。サイトを使用する外部ドメインごとに異なる ID を設定し、profile.php を次のように変更する必要があります。

if( isset($_REQUEST['sid']) ) session_id($_REQUEST['sid']);

session_start();

次のようなスクリプトを呼び出します www.userprofiles.com/profile.php?userid=1&sid=somesessionid1234

于 2009-08-27T10:32:06.617 に答える