0

さまざまな理由から、Web サイトのセッション情報をフラットファイルからデータベース セッションに変換する作業を行っています。主な理由は、管理パネルとユーザー パネルの両方で同じユーザー データベースを使用しているためです。

管理パネルはメイン ドメインのサブドメインに設定されています。

domain.com staff.domain.com

両方のドメインはまったく同じセッション ハンドラーを使用しますが、サブドメインと通常のドメインで実際にセッションを作成する場合、同じコンピューター/ユーザーに対して 2 つの異なる session_id が作成されます。

この動作は正常ですか?セッションが既に作成されているため、ユーザーパネルにログインすると、ログインせずにスタッフパネルを使用できるようにする方法はありますか?

ありがとうございました

4

4 に答える 4

2

PHPスクリプトから次を設定できます:

ini_set('session.cookie_domain', '.domain.tld');

サブドメイン間でセッションを共有するため。

session_set_save_handlerなどのおかげで、クラスを使用してセッションの読み取り/書き込み機能をラップしていると想定しているため、セッションをDBに保存するという事実は、この機能と直接関係する必要はありません。

于 2012-08-16T17:57:56.157 に答える
1

セッションIDの転送にCookieを使用していると思います。Cookie は別の (サブ) ドメインにあるため、Web サイトの他の部分には渡されません。したがって、PHP は新しいセッション ID を生成します。

ただし、両方の部分が同じセッション名を持ち、セッション ID を渡すことができれば、すべてがうまくいくはずです。

たとえば、セッション ID をパラメーターとして受け入れる特別なスクリプトを作成し、そのセッション データを引き継ぐことができます。

ただし、これがセッションを盗むために簡単に悪用されないように、ここでは注意してください。したがって、両方のサイトで機能する Cookie を使用する方が、より簡単な解決策になる可能性があります。

于 2012-08-16T17:57:28.713 に答える
1

session_set_cookie_paramsいずれの場合も、セッションを開始する前に、セッション Cookie のドメインを適切に呼び出して設定する必要があります。ドキュメントには、何をする必要があるかが正確に記載されています。

于 2012-08-16T17:57:40.213 に答える
0

Cookie を使用してセッション ID を保存している場合は、サブドメインのワイルドカード値を使用して Cookie を設定していることを確認する必要があります。つまり、デフォルトでは、PHP は完全なサブドメイン名とドメイン名を使用して Cookie を設定します (つまり、Cookie ドメインは「www.domain.com」です)。「.domain.com」のドメインで Cookie を設定した場合。Cookie は、「domain.com」のすべてのサブドメインで読み取り可能です。

于 2012-08-16T18:00:03.273 に答える