※ ChatGPTを利用し、要約された質問です(原文:古いセッションが消えない)
古いセッションが消えない対処法とは?
このQ&Aのポイント
フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。引数で表示させる内容を異なるようにするPHPファイルです。対処法が分からず困っています。
古いセッションが消えない問題に困っている場合、以下の対処法を試してみてください。まず、session_cache_limiter関数を使用し、キャッシュ制御を行います。さらに、header関数を使用してCache-Controlヘッダーを設定し、nostore、no-cache、must-revvalidateを指定します。これにより、ブラウザがセッションをキャッシュしないようになります。また、session_start関数の前にsession_cache_limiterとheaderを置くことで効果を発揮します。
また、リロード時にセッションが残ってしまう問題については、session_regenerate_id関数を使用することで対処できます。セッションを再生成することで前のセッションが破棄され、新しいセッションが作成されます。これにより、リロード時に前のセッションの情報が表示されることを防ぐことができます。session_regenerate_id関数はセッションの再生成に使用されるため、セッションを開始する前に呼び出す必要があります。
フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。
<?
header('Cache-Control: nostore, no-cache, must-revvalidate');
session_cache_limiter('private_no_expire');
session_start();
header("Content-Type: text/html; charset=EUC");
$http = $_SERVER['HTTP_REFERER']; //どこから来たか
$form_id = $_POST['form_id'];
$form_pass = $_POST['form_pass'];
$flg = $_POST['t'];
$session = session_id();
if($http == "http://192.168.1.250/~fukazawa/session/form.html"){
$_SESSION['id'] = $form_id;
$_SESSION['pass'] = $form_pass;
}
$test = $_SESSION['id'];
$test1 = $_SESSION['pass'];
if($flg == "t"){
echo <<<EOM
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>
</title>
</head>
<body>
◎$test<br />$test1
<br><br><br><a href="session.php">test</a><br><br>
<a href="session.php?t=test">test2</a>
</body>
</html>
EOM;
}else{
echo <<<EOM
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>
</title>
</head>
<body>
◎$test<br />$test1
<a href="session.php">test</a><br>
<a href="session.php?t=test">test2</a>
</body>
</html>
EOM;
}
?>
引数で表示させる内容を異なるようにするPHPファイルです。
仮に一回目にIDを「てすと」、パスワードを「ttt」でログインした場合、session.php・session.php?t=testに表示されるのは、
「◎てすと
ttt」
です。
そして、これをいったんログアウトして、今度は
ID「二回目」、パスワード「two」でログインすると、
session.phpには
「◎二回目
two
」と表示されますが、
session.php?t=test
に飛んだ場合、
一回目のIDとパスワード、つまり
「◎てすと
ttt」
が表示されてしまいます。
ブラウザをリロードすると
「◎二回目
two
」
と表示されます。
これは、前のセッションがまだ残ってしまっているということなのでしょうか。
対処法が分からず困っています。
お礼
すみません、自己解決いたしました。 回答いただき、ありがとうございました。