web-dev-qa-db-ja.com

サブドメインはPHPセッションを認識しません

ユーザーデータベースとログインフォームを備えたWebサイトがあります。このシステムは100%完璧に機能しています。名前= _www.example.com_のメインサイトと_accounts.example.com_というサブドメインがあります。ユーザーがログインすると、メインサイト_www.example.com/login.php_にログインします。

プロフィールを表示して編集するには、_accounts.example.com/profile.php?user=theirusername_に移動するリンクをクリックします。ページが読み込まれると、編集ボタンが表示され、自分のアカウントを表示しているかどうかが表示されます。 <?php if($user == $dbusername){ echo"<a href='edit.php'>EDIT</a>";}のようにこれを実行します。この機能は、_www.example.com/Accounts/profile.php?user=theirusername_に移動すると正常に機能しますが、サブドメインでは機能しません。 _accounts.example.com_は、_www.example.com/Account/_と同じパスを指します。

なぜこれが起こっているのか私にはわかりません。私は標準のphpSESSIONSを使用しています。 Safari Inspectorの[Cookies]タブの内部を見ると、1 SESSION、_accounts.example.com_が表示されます。

Cookieを別のサブドメインに「運ぶ」方法はありますか?どんな助けでも素晴らしいでしょう!ありがとう!

1
Ryan

サブドメイン_www.example.com_と_accounts.example.com_の両方でCookieを使用する必要がある場合は、ルートドメイン_example.com_に設定する必要があります。 PHP設定 session.cookie_domain を_".example.com"_に変更する必要があります。

  1. Php.iniでは、_session.cookie_domain = ".example.com"_を持つことができます
  2. .htaccessバリアント:_php_value session.cookie_domain .example.com_
  3. またはPHPスクリプト内:ini_set('session.cookie_domain', '.example.com' );

これが推奨される順序です。サーバー構成にアクセスできる場合は、関連するVirtualHostsの_php.ini_でこれを行う必要があります。 3番目のオプションは、PHPスクリプトごとに個別に変更する必要があるため、最悪です。

3
Esa Jokinen