0

domainname.de、domainname.ch、domainname.at、domainname.esなど、さまざまなドメインからアクセスできるWebサイトを運営しています...

顧客が支払いを希望すると、もちろん https で保護された支払いページが表示されます。サーバーの制限により、1 つのドメイン (domainname-secure.com) にのみ配置できる SSL 証明書は 1 つだけ許可されています。

私はさまざまな価格を請求するため、ユーザーが属するドメインを知る必要があります。そのため、domainname-secure.com にリダイレクトするときに、ドメイン (例: domainname.de) をセッション変数に保存し、get パラメーターとして$_SESSION['domain_default']追加して sessionID を渡します。session_id=[session_id]

次に$_GET['session_id']、次のコマンドを実行して、domainname-secure.com でセッションを利用できるようにします。

session_id($_GET['session_id']);

session_start();

自分でテストすると、完全に正常に動作しますが、誰かが domainname-secure.com にアクセスして$_SESSION['domain_default'].

これは1日に数回発生しますが、なぜこれが機能しないのか本当にわかりません! 私は多くの異なるリンクから何度もテストしていますが、私にとっては完全に正常に動作します.

なぜ時々うまくいかないのか想像できる人もいますか?

セッションIDを別のドメインに渡すのは「良い」または安全ではありませんか?また、リダイレクト後に常に読み取り可能であるとは限りませんか?

間違いを判断するのは難しいと思いますが、セッションに関する既知の問題や、より良い方法でそれを行うためのヒントを探していますか?

4

1 に答える 1

2

セッションはドメインごとに PHP によって管理されます。つまり、意図的にドメインを混在させることはありません。

データベースへの書き込みや memcached セッションの使用など、別のセッション ストレージ メカニズムを使用する場合は、この制限を克服できます。

ドメインを変更するときにセッション情報にアクセスできるようにする場合は、次の 2 つの方法があります。

  • PHP の $_SESSION を使用しないでください。memcached/redis/sql で独自のセッション管理をセットアップしてください。

または:

  • PHP の $_SESSION を使用しますが、あるドメインから別のドメインに転送するときは、$_SESSION でデータをシリアル化し、SQL のように両方のドメインからアクセスできる場所に配置します。
于 2012-10-02T14:36:52.800 に答える