[phpセッションをサブドメインに引き継ぐことを許可する]によると、異なるサブドメイン間でPHPセッションを許可する方法は3つあります。
- php.ini:
session.cookie_domain = ".example.com"
- .htaccess:
php_value session.cookie_domain .example.com
- phpスクリプト:
ini_set('session.cookie_domain', '.example.com' );
(私のウェブホストは.htaccessを介したPHPの変更を許可していないので、他の2つの方法を試しました。)
ただし、session_regenerate_id(true);
私のlogin.phpはsession.cookie_domain = ".example.com"
、ヘッダーリダイレクト後、PHPセッション変数を空にするという点で競合します。
login.php
if (!isset($_SESSION)) { session_start(); }
// authentication codes...
session_regenerate_id(true);
$_SESSION['username'] = $username;
header('Location: redirect.php');
exit;
redirect.php
if (!isset($_SESSION)) { session_start(); }
var_dump($_SESSION); // returns array(0) { } if session.cookie_domain is set
true
inを使用すると古いセッションが削除されることは理解してsession_regenerate_id()
いますが、が設定されていない場合はセッション変数が空になりませんsession.cookie_domain
。なんでそうなの?
また、セッションIDを再生成しないと、上記の3つのソリューションは機能しませんが、再生成すると、セッション変数が空になります。これを解決する方法はありますか?