2012-02-05 38 views
9

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

ユーザーIDやユーザー設定などのサブドメイン間で情報を渡す必要があるかもしれません.SESSION変数を使用してsudomain間で情報を渡す方法を教えてください。

EDIT: 私はこのアイデアが好き:あなたのスクリプトの最初のものとして

ini_set('session.cookie_domain', '.example.com'); 
+1

重複がありますか? [phpセッションがサブドメインに持ち越されることを許可する](0120-13753) – Josh

+2

SAMEセッションのすべてを使用する予定ですか?またはサブドメインによってセッション情報が分離されていますか? 1つのサブドメインを拡張して別の物理サーバーに移動した場合、すべてのドメインでセッションを共有すると問題になる可能性があります。または、すべてのサーバーがアクセスできるメモリ/データベースベースのセッション記憶域に切り替える必要があります。 – drew010

+0

すべてのサブドメインでSAMEセッションを使用する予定です。しかし、別の欠点は、私は1つのサーバー上に複数のドメインを持っている可能性があります。通常のドメインの間でセッションをseparteに保つために、私は何をしますか?サブドメインだけのためにそれらを保持しますか? –

答えて

13

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

結局のところ、あなただけのルートドメインにsession.cookie_domainを設定する必要が

session.cookie_domain = ".example.com" 

またiniファイルのエントリを設定するために使用される異なるアプローチのためmanualをご確認ください。

+0

複数のドメインを持つホスティングサービスを使用している場合はどうなりますか?例はexample1.com、example2.com、example3.comです。あなたは何をしますか? –

+1

あなたのドメインごとに '.htaccess'ファイルに' php_value session.cookie_domain .example.com'を追加してください –

+1

"php_value session.cookie_domain .example.com?"と追加してごめんなさい正しい? –

9

1)サブドメインが変更)セッションファイル

2を保存するために同じパスを使用する必要がありますあなたの

php.iniのsession.cookie_domain = ".example.com"

または

またはスクリプトの内部の.htaccess php_value session.cookie_domain .example.comini_set('session.cookie_domain', '.example.com');

+0

複数のドメインを持つホスティングサービスを使用している場合はどうなりますか?例はexample1.com、example2.com、example3.comです。あなたは何をしますか? –

+0

@KevinOluseunKarimuクッキーは何もこの方法では動作しません。別のドメインにつながるリンクにセッションIDを添付することもできます。別のドメインでは、このセッションIDを取得してセッションを開始できます。共有セッションフォルダに関する要件はまだここにあります。 – Cheery

+0

sessiom idをリンクに入れるにはどうすればよいですか? –

2

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

別の方法は、passing the sessionID around using linksまたはhidden <input>フィールド(フォーム用)になります。

別のウェブサイトではセッションが共有されないため(私の知る限り、サブドメインは互いに技術的に「異なる場所」であるため)、サーバー側にセッションを保存することはできません。セッションを処理するためにデータベースを使用してください。この方法では、複数のサイトが同じセッショントラッキングテーブルを共有できます。

+0

複数のドメインを持つホスティングサービスを使用している場合はどうなりますか?例はexample1.com、example2.com、example3.comです。あなたは何をしますか? –

7

私は私の問題への解決策を見つけた:

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

これは問題なく動作しているように見えます。これはセキュリティリスクの低い良い方法ですか?あなたは、PHPファイルにセッションを作成するには、最初の行で、この行を追加する前に

3

:私は今、しばらくの間、これでラウンドに行くされており、どのような私のために働いたことは以下のコードを配置している

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

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

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

関連する問題