【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

教えてください。

BBB.phpでこのように書いていたとします。
<?php
session_cache_limiter('private, must-revalidate');
session_start();

~いろいろ処理~

unset($_SESSION['pcode']);

~いろいろ処理~

?>
<?php include(dirname(__FILE__).'/../include/header.php'); ?>
</body></html>

header.phpでは
$_SESSION['pcode']を表示しているのですが、
前のページ(たとえばAAA.php)で$_SESSION['pcode']に値を入れていた場合
BBB.phpを表示すると
その値が表示されてしまいます。

直前に
unset($_SESSION['pcode']);
をしているのに
その前の値が表示されます。

includeはどのタイミングでなされるのでしょうか?

また、
unset($_SESSION['pcode']);
を有効にするにはどうすればいいのでしょうか?

よろしくお願いします。

A 回答 (2件)

もうすこし単純なモデルでやってみれば?



//AAA.PHP
<?php
session_start();
$_SESSION["hoge"]="hogehoge";
$_SESSION["fuga"]="fugafuga";
?>
<a href="BBB.php">BBB</a>

//BBB.PHP
<?php
session_cache_limiter('private, must-revalidate');
session_start();
unset($_SESSION["hoge"]); // ※
include "header.php";
?>

//header.php
<?PHP
var_dump($_SESSION);
?>

※の行をコメントアウトしたり、生かしたりすれば
AAA.phpからBBB.phpに移動する際にきちんと消えるかどうかが
確認できると思いますが
    • good
    • 0
この回答へのお礼

正確にいえば
header.phpで、
セッション値があれば、変数に代入し、
その変数を表示していたのですが、
BBB.PHPで
セッション値をクリアする前に、同じ変数名で値を代入していました。

そりゃ消えないはず・・。
お騒がせしました。

インクルードをあまり使ったことなかったので
タイミングなどが関係しているのかと思っていました。

早くにご回答いただいたので、
ベストアンサーにさせていただきます。

ありがとうございました。

お礼日時:2015/01/08 10:32

>header.phpでは


>$_SESSION['pcode']を表示している

まさかheader.phpでもsession_start()しているなんてオチはありませんよね(セッションクッキーから$_SESSIONが再生成される)。
    • good
    • 0
この回答へのお礼

さすがにそれはありませんでしたが、
同レベルのポカをしていました。

回答ありがとうございました。

お礼日時:2015/01/08 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!