オンラインでセッションセキュリティについてたくさん読んだ後、PHPログインスクリプトを書いています。ただし、セッション情報がページ間で一貫していないという問題があります。私が使用している方法の1つに関連して見落としている動作がおそらくありますが、私はPHPまたはセッションの専門家ではありません。私が問題を抱えているコードはhead
、すべてのページので呼び出されるセッション開始関数にあります。
//Setup the session
session_name('CPI_SESSION');
session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : true), true);
//Start the session
session_start();
print_r($_SESSION);
echo '<br/>';
if(!isset($_SESSION['session_init']))
{
session_regenerate_id(true);
$_SESSION['session_init'] = true;
print_r($_SESSION);
}
私が使用している方法は、ここで読んだものです。私が変更したのはsession_regenerate_id
、古いセッションを削除することだけです。これは、私が望む動作です。しかし、予期しない結果が得られます。私は次のecho
ようになります:
配列()
配列([session_init] => 1)
それぞれからprint_r
。したがって、関数が呼び出されるたびに、私の知識を超えた何らかの理由でセッションが空になり、IDが再生成され、すでに空のセッションがクリアされてから、が設定されますsession_init
。ページを更新しsession_init
ても保存されるはずですが、保存されません。これにより、同じことが繰り返し行われます。どうしてこれなの?コメントアウトしてみましたsession_name
がsession_set_cookie_params
、違いはありませんでした。
私はこれをApache2.2サーバーとPHP5.3でローカルに実行しています。