0

2 つの異なる Web サーバーに自作の CMS をインストールしています。それぞれが同じコードを維持します。$_SESSION異なるドメイン間で変数を渡そうとすると、本当に厄介な問題が発生しました。

私の CMS は domain1.com にあります。制御している Web サイトは domain2.com にあります。私のシステムは、ログイン情報のすべてのセッション変数を domain1.com から domain2.com に URL リンク経由で渡します (domain1.com には次のようなリンクがあります: http://domain2.com?sessionId=1gh...)(sessionId は session_id() によって生成されます)。domain2.com はセッション ID を取得し、セッションsession_id($_GET['sessionId'])を設定して変数を取得します。次に、上部に管理機能を備えたバーが表示されます。

このシステムは、ホストの 1 つとローカルホストでうまく機能します。しかし、最近別のホストに転送し、CMS を同じコードで正常にインストールしました。この機能以外はすべて機能します。リンクをクリックして session_id を設定しようとすると、session_id は変更されますが、$_SESSION変数は削除されます。CMS に戻ったら、再ログインする必要があります。どういうわけか、このホストでは、session_id を変更すると$_SESSION変数が削除されます。

私はセッション変数が好きではありませんでした。もう一度やり直す場合は使用しません (おそらくプレーン Cookie を使用するでしょう)。しかし、私は本当にこれを理解する必要があります。動作するホストは Bluehost で、両方のドメインが Bluehost によってホストされています。動作しないホストは [EDIT]ByteHost で、ドメイン レジストラーは Godaddy です。

domain2.com のコード例を次に示します。

...

if ( $_GET['sessionId'] )
{
 session_id($_GET['sessionId']);
}

session_start();

echo session_id(); // returns the proper sessionId passed through the url

print_r($_SESSION); // does not work. returns array()

...

$_SESSION私はまだ CMS にログインしていたので、変数が以前に存在していたことを保証できます。

セッション変数が 1 つのホストでは機能するが、別のホストでは機能しない理由はありますか?

php.ini ファイルを作業中のホスト ファイルに置き換えてみました。問題はまだありました。

お時間をいただきありがとうございます!

アップデート

これをCMSから削除することになりました。ここで、ログインの詳細を URL に渡すだけで、その人がログインします。よりクリーンに動作します。

4

2 に答える 2

3

これが機能しない理由は次のとおりです。

  • 別の物理サーバー
  • ドメインごとに異なるアカウント(同じ物理サーバーであっても)
  • ドメインごとに異なるapache/phpデーモン(一部の共有ホスティングサイトは、ドメインごとに個別のディレクトリを作成し、apacheがドメイン間で情報を共有することを制限します。これは、セッション情報が渡されないようにする効果もあります。考えてみてください-同じホスティングプロバイダー上の他の誰かのドメインがあなたのクライアントのセッション情報にアクセスできるようにしたいですか?)
  • 構成(apacheまたはphp)、または.htaccessルール

これが私がお勧めすることです:これをやめなさい。これは、コードの非常に深刻なセキュリティ上の欠陥を修正する絶好の機会です。ホスティングプロバイダーで診断するまでに、HTML5ストレージまたは安全なCookieを使用して必要なものをすべて書き直すことができます。

私の推測では、ホスティングプロバイダーは、別のドメインから盗まれたセッション情報フォームを保護するのに十分賢いです。ただし、どちらの場合も、別のドメインからセッション情報を盗む必要がないようにコードを変更することを強くお勧めします。

于 2012-10-03T15:39:22.193 に答える
0

複数のドメインでセッションを行うには、Cookieは単一のドメインベースでのみ機能するため、セッションCookieではなくURLでセッションIDを渡す必要があります。

サブドメインを使用すると、個別の顧客でない場合に問題が解決しますa.domain.com and b.domain.com

于 2012-10-03T15:40:13.817 に答える