4

2つのサブドメインで実行されているWebサイトがあり、どちらもログインが必要です(同じDBアクセスクレデンシャルに基づく)。ユーザーが使いやすくするために、ユーザーが別々にログインしなくても両方のサブドメインをナビゲートできるように変更したいと思いました。基本的に、ユーザーは一方のサブドメインにログインしてから、一方と他方の間を自由にナビゲートできます。

phpセッションをサブドメインに引き継ぐことを許可するで見つけた解決策の1つは、session.cookie_domain変数をに変更して、すべてのサブドメインがセッション変数を共有するようにすることですが、何かが間違っているようです。subdomain1にログインしてナビゲートすることはできますが、subdomain2からページをロードするとすぐに、subdomain1はすべてのセッションデータを失い、ログインページに戻ります。これは逆の場合にも発生します(最初はsubdomain2からログインします)。変更前は、サブドメインは同時にログインできましたが、お互いを「見る」ことはありませんでした。

この問題が発生する原因は何ですか?

4

1 に答える 1

8

私の容疑者はsuhoshinプロジェクトセッション暗号化機能です。このパッチセットはほとんどのDebianベースのシステムに含まれています。さまざまなソースから生成されたキーを使用してセッションファイルのコンテンツをエンコードし、同じマシンで実行されている他のphpスクリプト(共有ホスティング)またはセッションハイジャックからセッションコンテンツを保護するように構成できます。ソースの1つはdocroot(デフォルトで有効)です。これは通常、サブドメインごとに異なります。

インストールされているかどうかを確認します

単純なものは、拡張機能とその設定を報告し、以下phpinfo()の名前のブロックを探して、オンになっているかどうかを確認しますsuhosinsuhosin.session.encryptsuhosin.session.cryptdocroot

暗号化を無効にする

明らかに、php.iniを編集して、暗号化全体を無効にするか、サーバーにアクセスできる場合はdocroot部分のみを無効にすることができます。

そうでない場合で、サーバーがApacheを実行している場合は、.htaccess次のようにphpアプリのルートのファイルでApacheを無効にしてみてください。

php_flag "suhosin.session.cryptdocroot" 0

動作している場合は、phpinfo()の出力に違いが見られるはずです。(ローカル値列)

ホストがファイルを許可していない場合は.htaccess、phpで同じ変数を設定できますが、前に設定することが重要session_start()です。うまくいけば、これを配置するためのある種のフロントコントローラーがあります。

ini_set('suhosin.session.cryptdocroot', 0);
phpinfo();

phpinfの出力は、メソッドのcryptdocroot行と同じで、.htaccessローカル値が「オフ」になっている必要があります。

于 2012-07-25T19:48:10.660 に答える