session_regenerate_id関数につい...
これはPHPの動作の推奨を知りたいということですので、PHPの公式ドキュメントを見ましょう。
http://php.net/manual/ja/function.session-regenerate-id.php
赤ワクで以下のような警告があります。
「Current session_regenerate_id does not handle unstable network well. e.g. Mobile and WiFi network. Therefore, you may experience lost session by calling session_regenerate_id.
You should not destroy old session data immediately, but should use destroy time-stamp and control access to old session ID. Otherwise, concurrent access to page may result in inconsistent state, or you may have lost session, or it may cause client(browser) side race condition and may create many session ID needlessly. Immediate session data deletion disables session hijack attack detection and prevention also.」
意訳すると、session_regenerate_idは不安定なネットワークだと上手く動作しない。古いセッションをすぐに消すべきではない。タイムスタンプ等を使って、時限的に消去されるようにするべきだ。ということです。
一般的にsessionは有効期限が設定されているので、アプリ側で明示的に削除することはあまりしません。
ただ、これもサービスのポリシーによっては異なるので一概には言えません。
riccaさん、お気づきいただきありがとうございます。
補足に追記をさせていただきました。
PHPの公式ページの方も確認させていただきました。
sessionはアプリ側で明示的には削除しない事が多いのですね。勉強になりました。
session_regerate_id()の実行を行った場合、
セッション変数の値が書き込まれた古いセッションファイルが
サーバに残ったままとなりますので
セッションハイジャックの危険性が高まるのではないかと考えましたが、
セキュリティは奥が深そうですので
この辺りの詳細な学習は後回しにしてひとまず先に進もうと思います。
補足の方もご対応ありがとうございます。
また何かありましたら質問等させていただきますので、引き続きよろしくお願いいたします。
部活の学習一覧
Lesson 01
「WEBサービスと必要な機能」
Lesson 02
「画面を設計しよう!」
Lesson 03
「テーブルを設計しよう!part1」
Lesson 04
「テーブルを設計しよう!part2」
Lesson 05
「テーブルを設計しよう!part3」
Lesson 06
「DB作成」
Lesson 07
「画面を作ろう!」
Lesson 08
「画面を作ろう!part2」
Lesson 09
「ユーザー登録機能を作ろう!」
Lesson 10
「ユーザー登録機能を作ろう!part2」
コーヒーブレイク
「投資の小話」
Lesson 11
「ログイン機能を作ろう!」
Lesson 12
「ログアウト機能を作ろう!」
Lesson 13
「退会機能を作ろう!」
Lesson 14
「プロフィール編集機能を作ろう!」
コーヒーブレイク
「書いて書いて書きまくれ!」
Lesson 15
「パスワード変更機能を作ろう!」
Lesson 16
「パスワードリマインダー機能を作ろう!」
Lesson 17
「商品登録機能を作ろう!」
Lesson 18
「商品登録機能を作ろう!part2」
Lesson 19
「商品登録機能を作ろう!part3」
Lesson 20
「商品一覧表示機能を作ろう!」
Lesson 21
「商品詳細画面を作ろう!」
Lesson 22
「商品検索機能を作ろう!」
Lesson 23
「連絡掲示板機能を作ろう!」
Lesson 24
「お気に入り機能を作ろう!」
Lesson 25
「マイページ機能を作ろう!」
コーヒーブレイク
「はたらくプログラミング 第5話」
ご意見箱
・session_regenerate_id()の動きを確認していたところ、関数を実行したタイミングでサーバ上に新しいセッションファイルが作成され、ブラウザのセッションIDの値も自動で書き換えられました。
しかし、サーバ上の古いセッションIDのファイルは削除されずに残ってしまうようです。(ファイルの中身も削除されず残ったままとなります。)
インターネットで調べたところ、session_regenerate_idの引数にtrueを付けると、古いセッションIDのファイルも削除されるとわかりました。
session_regenerate_id(true)の方がよりセキュリティが高まるのではないかと思いますので、今後引数にtrueをつけようと考えていますが、実際にアプリを作る上でtrueを指定するのは非推奨という事はありますでしょうか?
※trueを付けた場合、セッションが切れてしまう事象があると記事を見つけましたので・・
https://senews.jp/session-kireru/
また、本レッスン動画の最後のまとめのページに書かれている「4.session_unset()はセッションIDまで消す関数」は、session_unset()ではなくsession_destroy()ではないかと思われますので、ご確認頂ければと思います。
以上です。
お手数をおかけしますが、よろしくお願いいたします。