web-dev-qa-db-ja.com

複数のサブドメイン間でのSESSION変数の共有

私はウェブサイトwww.example.comを持っています。これには、単一のアプリケーションまたはプログラムで機能する複数のサブドメインがあります。たとえば、login.example.comはユーザーがサイトにログインできるようにし、system.example.comはユーザーが情報システムにアクセスできるようにし、forums.example.comはユーザーがフォーラムにアクセスできるようにします。

ユーザーIDやユーザー設定などのサブドメイン間で情報を渡す必要がある場合があります。SESSION変数を使用してサブドメイン間で情報を渡すにはどうすればよいですか?

編集:私はこのアイデアが好きです:

スクリプトの最初のものとして:

ini_set('session.cookie_domain', '.example.com' ); 
12

PHPセッションIDはCookieに保存されます。 すべてのサブドメインでCookieを使用できるようにするには、Cookieをルートドメインに割り当てる必要があります。次に、すべてのサブドメインがCookieからセッションIDを取得し、PHPは渡されたセッションIDを使用してセッションを見つけることができます。

結局のところ、session.cookie_domainファイルのルートドメインにphp.iniを設定する必要があります

session.cookie_domain = ".example.com"

また、iniエントリの設定に使用されるさまざまなアプローチについて manual を確認してください。

14
Shiplu Mokaddim

1)サブドメインは、セッションファイルを保存するために同じパスを使用する必要があります

2)あなたの

php.ini _session.cookie_domain = ".example.com"_

または.htaccess _php_value session.cookie_domain .example.com_

またはスクリプト内ini_set('session.cookie_domain', '.example.com' );

11
Cheery

私は自分の問題の解決策を見つけました:

session_name("2620368ghwahw90w");
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();

これは問題なく機能しているようです。これはセキュリティリスクの低い優れた方法ですか?

10

Phpファイルでセッションを作成する前に、最初の行に次の行を追加します。

<?php
//session cross to sub domain
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
3
Pathic

あなたはクッキーを使うことができます。 setcookie()pathパラメータを確認してください。これにより、そのCookieがドメイン全体で使用できるようになります。これの欠点は、Cookieをオフにする人です(プライベートブラウジングモード)

別の方法は リンクを使用してsessionIDを渡す またはhidden <input>フィールド(フォーム用)。

別々のWebサイトはセッションを共有しないため(私が知る限り、サブドメインは技術的に互いに「異なる場所」であるため)、サーバー側に保存するためにセッションを使用しないでください。代わりに、データベースを使用してセッションを処理してください。そうすれば、複数のサイトが同じセッション追跡テーブルを共有できます。

2
Joseph

チャームのように機能します!

最もクリーンな方法は、.envに変数_SESSION_DOMAIN=.example.com_を作成することだと思います。

または、_config/session.php_を開いて'domain' => env('SESSION_DOMAIN', '.example.com')を設定し、すべてのサブドメインを設定することもできます。 _domain.example.com_、_test.example.com_でも_example.com_は同じセッションを共有します

0
DAVID AJAYI

私はこれをしばらくの間試してきましたが、私にとってうまくいったのは以下のコードを配置することです:

session_name("some_session_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();

セッション変数を使用するすべてのサブドメインにわたって。これをインデックスphpファイルの先頭に設定すると機能します。これがそれを明らかにすることを願っています。

0
Victor Okech

サブドメイン間でセッションCookieを共有するには、Cookieのドメインを.example.orgに設定する必要があります(ドットに注意してください)。

http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain

0
Philippe Gerber