• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPのセッション終了について)

PHPのセッション終了について

このQ&Aのポイント
  • PHPのセッション終了について不明な点があります。
  • セッション変数の初期化のみでは中身が消えないため、session_destroy()を実行する必要があります。
  • セッションの終了はセキュリティ上重要な処理であり、セッション情報をきちんと削除するためにはsession_destroy()を使う必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
noname#243182
noname#243182
回答No.1

セッション処理の仕組みを把握することで、この疑問は解消します。 実行時設定がデフォルトである場合、ハンドラはファイル、パスはテンポラリディレクトリです。 http://www.php.net/manual/ja/session.configuration.php#ini.session.save-handler ご自身で準備されたテストスクリプトにブラウザを通してアクセスしながら、セッションデータが保存されるディレクトリをご覧いただくと、セッションが開始されたとき、セッションIDに紐付くデータが生成されることに気づかれるでしょう。そして、セッション変数を初期化しただけではこのデータファイルが削除されないことにも気づかれるはずです。 このように、明示的にセッションの破壊を行わない限り、サーバにデータが残った状態があるということです。セッション変数の初期化のみ行いデータを削除したつもりでも、セッションIDやセッションデータが生きていると、次のリクエストでセッション変数の内容が元通りに生成されてしまいます。 ログアウトなどの処理を実装する場合、多くのユーザはログアウト後もブラウザを開いたままであることが考えられます。そのとき、サーバ側のデータを削除することは勿論、セッションIDも削除しなければなりません。そのことを考慮した例がマニュアルに記載されています。 http://www.php.net/manual/ja/function.session-destroy.php また上記はデフォルトの設定を前提とした話ですので、独自にハンドラを実装するための関数「session_set_save_handler()」の説明をご覧になることで、さらに理解が深まるのではないでしょうか。 http://www.php.net/manual/ja/function.session-set-save-handler.php

loveone6
質問者

お礼

丁寧なご回答ありがとうございます。 確かに、セッションの初期化だけでは紐付けされたデータは削除されませんでした。 ご指摘の通りログアウト等、確実にセッション情報を削除しなければならない時に初期化だけでは不十分ですね。 初期化と削除両方が必要だと分かりました。

関連するQ&A