2009-03-13 4 views
59

私はすべてのユーザーデータに対してphpセッション(セッションIDクッキーを除くクッキーではありません)を使用し、ユーザーは自分のプロファイルuser.mydomain.comに行くとすぐに "ログアウト"サブドメインを削除してください。phpセッションがサブドメインに引き継ぐことを許可します

限り、その* .mydomain.com

+0

まず、 'ini_set( 'session.cookie_domainにより'、 '.example.comと')'、*その後* 'のsession_start()'や 'セッション::開始()' HTTPSから:/ /github.com/delight-im/PHP-Cookie – caw

答えて

74
ここ

ある4つのオプションとして、すべてのドメインからのセッションを受け入れるする方法はあります。

置き、このあなたのphp.iniの:

session.cookie_domain = ".example.com" 

またはあなたの.htaccessで:

php_value session.cookie_domain .example.com 

またはあなたのスクリプトの最初の事のように:

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

またはINサイトのphp-fpmプール設定:

php_value[session.cookie_domain] = .example.com 
+2

残念ながら3人すべてがうまく動作しませんでしたが、スター*が必要でしょうか? – Anthony

+2

非常に奇妙な、私は以前にそれらの方法を使用して、彼らは正常に動作します。あなたは偶然、Suhosinをインストールしましたか?これを可能にするために変更が必要な設定があることを覚えていますか?あなたがインストールしていない場合は、あなたのインストールに関する詳細情報(例えば、apache、lighttpd、php version)を投稿できますか? – CTT

+0

いくつかのパッケージにはSuhosinが付属しています。 'php -i |それがそこにあるかどうかを確認するためにgrep -i 'Suhosin'' –

11
 if(isset($_COOKIE['session_id'])) 
      session_id($_COOKIE['session_id']); 
     Zend_Session::start(); //or session_start(); 
     if(!isset($_COOKIE['session_id'])) 
      setcookie('session_id', session_id(), 0, '/', '.yourdomain.com'); 

セキュリティは、私はとあなたが不完全か悪いかの答えのようにイライラしている場合、これはあなたの救世主である、のろわれました。それだけで動作します。

+0

これは私のために働いたが、私はセキュリティの問題を理解していない。どのようなセキュリティ上の問題があるかも説明していただけますか? – Neo

-3
if(isset($_COOKIE['session_id'])) 
    session_id($_COOKIE['session_id']); 
    Zend_Session::start(); //or session_start(); 

    if(!isset($_COOKIE['session_id'])) 
     setcookie('session_id', session_id(), 0, '/', '.yourdomain.com'); 

これは良い解決策ですが、すべての状況で使用することはできません。例として、セッションではないクッキーに頼ることができない場合は動作しません。

正しく使用すると、これは実際には機能しなくてはなりません。

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

たとえばあなたがsession_start()前にそれを置く必要があるとも私はこれはかなり古いですけどsession_start()

4

を呼び出して、すべてのファイルで - しかし、さらにCTTの提案@に展開する - 私は、PHPを追加する必要が次のテキストと私のサブドメインの各サブディレクトリ内の.iniファイル(つまりPHPのコードを実行し、セッションを必要とします):

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

私はこれが(それがこれを理解するために私の年齢を取った)ことができます願っています。

+0

私のローカル環境でセッション共有が正常に動作していたので、これは悪く、2時間デバッグされました。 は、以前にsuhosin設定をチェックしていたはずです – weyandch

2

私のために働いた別のオプションは:セッションの名前を強制することです:

session_name("myWebsite"); 
session_start(); 
0

私はこの問題を持っていたし、それは私は2つの異なるサブドメインごとに異なるのphp.iniファイルを使用していたが判明。これらのiniファイルは異なるsession.save_path変数を指定しました。明白な理由から、これはセッションを共有する必要のあるすべてのサブドメインで同じである必要があります。

5

変更コア機能の上部にセッション名が最終的にサブドメインのデフォルトのセッション名を変更

session_set_cookie_params(0,"/",".example.com",FALSE,FALSE); 
    setcookie(session_name(), session_id(),0,"/","example.com"); 
    session_start(); 

PHPページに次のコードを使用し

session_name('mysession'); 

のようなファイルそして、ファイルサブドメインのコア機能で、デフォルトのクッキーを削除 のような:

/*default session name*/ 
session_name("mysession"); 
/*remove the PHPSESSID and default session name from subdomain's cookie*/ 
setcookie("mysession", "",1,"/"); 
setcookie("PHPSESSID", "",1,"/"); 

あなたはPHPSESSIDとしてあなたのクッキー名を使用し続ける場合は、ただ単にドメインとサブドメインのすべてのCookieを削除し、プロセスを繰り返し、ブラウザの既存のCookieをチェックし

"mysession" string like session_name('mysession'), setcookie("mysession", "",1,"/"); 

ですべての機能を削除します。

+0

これは私の仕事でした。この質問には他に答えがありませんでした。 –

2

はい。 ini_setが動作しています。それが動作するのを見るためにブラウザのすべてのキャッシュとクッキーを破壊することを忘れないでください。

  1. あなたxxx.example.comyyy.example.com
  2. あなたのブラウザのすべてのキャッシュとクッキーを破壊し、あなたのPHPファイルは次のように開始する必要があります。

    ini_set('session.cookie_domain', '.example.com'); session_start(); 
    
関連する問題