- 締切済み
ログアウトする際にセッションファイルを削除したい
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();
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 1percent
- ベストアンサー率55% (10/18)
可能であればセッションを使った簡単なページを作成してみては? 私の環境では下記のページで 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で似たような現象についてやりとりがありました。
お礼
回答ありがとうございました。 確かに、いただいたコードでで試してみると、セッションファイルはきれいに削除されます。 が、開発中のプログラムではセッションファイルが削除されません。 実は、開発にフレームワーク「mojavi」を使用しており、セッションはすべて mojavi の $user オブジェクトを通して値をセットしています。 このあたりの影響なのかまだ不明です。