プロが教えるわが家の防犯対策術!

PHPでWEBアプリケーションを作成しています。

携帯対応にするために、フォームを使用できないところは
セッションIDをURLに付加しています。
ログアウト後(ユーザーがログアウトボタンをクリック)は、戻るボタンをクリックしても「ログインしていません」のエラーメッセージが表示されるようにしたいのです。
現在、ログアウトする際、すべてのセッション変数を削除しているのですが、ブラウザの戻るボタンをクリックすると、もとの画面が表示されます。
その画面にはセッションIDを埋め込んだリンクがあり、
クリックすると正常にリンク先に移動してしまいます。
セッションファイルが残っているために、セッションが継続されたような状態になってしまっているのではないかと思います。
セッションファイルを削除すれば、上記エラーメッセージが表示されるのです。

そこで、ログアウト時にセッションファイルを自動的に削除してしまいたいのですが、どのような方法をとればよいのでしょうか?
やっぱり普通にセッションファイルの場所を取得して、削除するしかないのでしょうか?
教えてください。

以下、ログアウト時の処理です。


// セッションの初期化
session_start();
// セッション変数を全て解除する
$_SESSION = array();
(session_id(''));

// セッションを切断するにはセッションクッキーも削除する。
// Note: セッション情報だけでなくセッションを破壊する。
if (isset($_COOKIE[session_name()]))
{
  setcookie(session_name(), '', time()-42000, '/');
}

// 最終的に、セッションを破壊する
session_unset();
session_destroy();

A 回答 (1件)

可能であればセッションを使った簡単なページを作成してみては?


私の環境では下記のページで
test1.php -> test2.php -> test3.php
の順に辿っていくとtest3.phpの所でセッションファイル(私の環境では/tmpの中sess_xxxxx)が削除されました。test3.phpから「戻る」でtest2.phpに移ってもセッション変数はからでした。

●環境
FedoraCore4
Apache 2.0.54
PHP 5.0.4

-------- tset1.php ---------
<?
session_start();
$sid = session_id();
$_SESSION['a'] = b;
$_SESSION['date'] = date("H:i:s");
echo "<a href=\"test2.php?PHPSESSID=${sid}\">test2</a>";
?>

--------- test2.php ---------
<?
session_start();
$sid = session_id();
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
echo "<a href=\"test3.php?PHPSESSID=${sid}\">test3</a>"
?>

-------- tset3.php -----------
<?
session_start();
$_SESSION = array();
session_unset();
session_destroy();
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
echo "SESSION END";
?>

----- 以上 -------------

参考URLで似たような現象についてやりとりがありました。

参考URL:http://ns1.php.gr.jp/pipermail/php-users/2003-Ju …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
確かに、いただいたコードでで試してみると、セッションファイルはきれいに削除されます。

が、開発中のプログラムではセッションファイルが削除されません。
実は、開発にフレームワーク「mojavi」を使用しており、セッションはすべて mojavi の $user オブジェクトを通して値をセットしています。
このあたりの影響なのかまだ不明です。

お礼日時:2005/09/26 11:12

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