0

オンラインでセッションセキュリティについてたくさん読んだ後、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_namesession_set_cookie_params、違いはありませんでした。

私はこれをApache2.2サーバーとPHP5.3でローカルに実行しています。

4

1 に答える 1

1

セッションの存続期間に問題があるようです。[session_set_cookie_params](http://www.php.net/manual/en/function.session-set-cookie-params.php)セッションが最初の引数として続く秒数を取ります。コードでは0に設定されています。このように大きな数値に変更してみてください。

<?php
//Setup the session
session_name('CPI_SESSION');
// set session time to 4 hours
session_set_cookie_params(3600*4, '/', $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? true : false), 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);
}
?>
于 2012-07-26T20:04:55.367 に答える