すべてのユーザーデータにphpセッション(cookieではなく、セッションID cookieを除く)を使用します。ユーザーが自分のプロファイルuser.mydomain.comにアクセスすると、サブドメインを削除するまですぐに「ログアウト」されます。
* .mydomain.comであれば、すべてのドメインからセッションを受け入れる方法はありますか
4つのオプションがあります。
これをphp.iniに配置します。
session.cookie_domain = ".example.com"
または、.htaccessで:
php_value session.cookie_domain .example.com
または、スクリプトの最初のものとして:
ini_set('session.cookie_domain', '.example.com' );
または、サイトのphp-fpmプール構成で:
php_value[session.cookie_domain] = .example.com
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');
あなたが私と同じくらい不完全または悪い答えに不満を感じているなら、これはあなたの救い主です。それはただ動作します。
コア関数ファイルの上部にあるセッション名を次のように変更します
session_name('mysession');
次に、PHPページに次のコードを使用します
session_set_cookie_params(0,"/",".example.com",FALSE,FALSE);
setcookie(session_name(), session_id(),0,"/","example.com");
session_start();
最後に、サブドメインのデフォルトのセッション名を変更し、次のようなサブドメインのコア機能ファイルからデフォルトのCookieを削除します。
/*default session name*/
session_name("mysession");
/*remove the PHPSESSID and default session name from subdomain's cookie*/
setcookie( "mysession", "",1,"/" );
setcookie( "PHPSESSID", "",1,"/" );
クッキー名をPHPSESSIDとして使用し続ける場合は、次のコマンドですべての関数を削除してください。
"mysession" string like session_name('mysession'), setcookie( "mysession", "",1,"/" );
次に、ブラウザの既存のCookieを確認し、ドメインとサブドメインのすべてのCookieを削除して、プロセスを繰り返します。
私はこれがかなり古いことを知っていますが、@ CTTの提案をさらに拡張するために、次のテキストを使用してサブドメインの各サブディレクトリ(phpコードを実行し、セッションを必要とします)にphp.iniファイルを追加する必要がありました:
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off
これが役立つことを願っています(これを理解するのに何年もかかりました)。
はい。 ini_set
は働いている。ただし、ブラウザのすべてのキャッシュとCookieを破棄して、機能することを確認してください。
あなたのxxx.example.com
およびyyy.example.com
、phpファイルは次のように開始する必要があります。
ini_set('session.cookie_domain', '.example.com' ); session_start();
私のために働いた別のオプション:セッションの名前を強制することです:
session_name("myWebsite");
session_start();
この問題が発生したばかりで、2つの異なるサブドメインに異なるphp.iniファイルを使用していたことがわかりました。これらのiniファイルは、異なる session.save_path 変数を指定しました。明らかな理由から、これはセッションを共有する必要があるすべてのサブドメインで同じである必要があります。
これを試して:
session_start();
$sessionId = session_id();
ユーザーを記録しました。ユーザーが他のサブドメインに切り替えると、このようなuser.mydomain.com/?id=$sessionId
$sessionId = $_GET['id'];
session_start($sessionId);
これで、ユーザーはすべてのセッション値を取得し、ログインしたままになります。