2012-02-16 15 views
5

私は2つのサブドメイン間でセッション変数を維持しようとしており、不可能であることがわかりました。私は「テスト1」と呼ぶ1がちょうど[サブドメイン間でセッション変数を維持する

$_SESSION['test'] = "Fred"; 

を設定し、単純に$ _SESSIONの値をエコーし​​ようとすると「テスト2」へのハイパーリンクを持って、テストベッドとして2つの最小限のPHPのWebページを作成することになりました'テスト']それが働いていることを証明するかどうか。自分のwwwドメインに 'test 1'を、サブドメインに 'test 2'を配置します。私はさまざまなソースからヘッダーに入るべきものの様々なバージョンを試しています。ここでは、メイン3(そしてもちろんその変種)は以下のとおりです。

ini_set('session.cookie_domain',substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); 
session_start(); 

または

ini_set('session.cookie_domain','mydomain.com'); 
session_start(); 

または

ini_set('session.cookie_domain', PHP_INI_ALL); 
session_start(); 

または

session_set_cookie_params(0, "/", ".mydomain.com", false); 
session_start(); 

に私は私が得ることを見つけますすべての場合において同一の結果となる。セッションはサブドメインを横切って運ばれません。ページテスト2では、$ _SESSION ['test']をどのような値に設定するか分かりません。しかし、ネットの周りには、上記の方法の1つがうまくいくと確信があるようです。何が起こっているのでしょうか?特に、私はメカニズムをテストするために最小限のページを使用しています(私が見ることのできる副作用はありません)。ところで、私は共有サーバー上にいます、もしそれがここに当てはまるならば。

ありがとうございました。フランク

を編集します。 私はそれを修正しました。問題はSuhosinによって引き起こされた。このページの下にある詳細な解答を見てください。

答えて

5

[OK]を、私はそれを釘付けし、それがstinkerでした。

Suhosinのsuhosin.session.cryptdocrootオプションが問題の原因の全体でした。セッション暗号化キーがDocRootに基づいている場合、ベースドメインとサブドメインが異なるディレクトリから提供されている場合、サブドメインは互いのセッション変数を見ることができません。これは、サーバー上のセッション変数が異なるフォルダーに格納されるため、対応する各ドメインからは見えません。

解決策。修正するために、4.8秒を追跡するために

suhosin.session.cryptdocroot=Off 
suhosin.cookie.cryptdocroot=Off 

48時間の悪夢:単純にphp.iniファイルでこれらの2行を追加します。

+0

「48時間の悪夢を追跡して、修正するのに4.8秒」 - スーパー。私はあなたの言う事が分かります :) – qasanov

0

私はそれがセッション名とセッションクッキーのパラメータを設定し、作業があります。

$some_name = session_name("some_name"); 
session_set_cookie_params(0, '/', '.some_domain.com'); 
session_start(); 
+0

ありがとうございました。私はセッションに名前を付けてみました - 喜びはありません。私は今でも多くの情報を持っています。私はphp.netのドキュメントで提案されているテストを試してみたが、以下を追加した:$ some_name = session_name( "some_name"); $ blnResult = ini_set( "session.cookie_domain"、 ".mydomain.com"); session_start(); if(empty($ blnResult)または(!$ blnResult)){echo "設定ができません";出口; }戻り値が設定されていないと表示されていることがわかります!それがなぜそうであるべきなのか? – Frankie

+0

@Frank Anderson私は 'session_set_cookie_params'だけを' ini_set'メソッドで試していません。 – jeroen

+0

ありがとうございました。私は不器用な間違いを犯しましたが、今はそれを修正しました。それでも、サブドメイン内にある限り、Session Varの値は「受信」ページに転送されません。それ以外に何ができますか、何が起こっているのかを調べようとする可能性のある他の診断は何ですか? – Frankie

関連する問題