PHP

session_regenerate_id

2021.02.06

PHPのsession_regenerate_id()の引数はtrueにしない。
・session_idはregenerateの必要がある(ログイン・ログアウト時など)
・引数にtrueを指定するとセッションデータ(セッションファイル)が削除されるが、不安定なネットワークではセッション切れを起こす可能性がある。
・セッションファイルは適時、削除する必要がある。


session_regenerate_id()を古い(期限切れ扱いの)セッションデータ(セッションファイル)削除のために使用せず(session_regenerate_id()でセッションファイルを削除しようとせず)、
別途適切な方法でセッションデータは削除するべき。

安定したアクセスのあるサイトであれば、アクセス数に応じsession.gc_divisorを適切な数値に設定すればそのタイミングでセッションデータは削除される。(php.ini-production/developmentは1000)
PHP 7.1からはsession_gc()を使用して適切なタイミングでセッションデータを削除する方法がベター。
Cronやアクセスに応じてsession_gc()を実行し、セッションデータを削除する。

session.gc_maxlifetimeについては短いほど良いが、サイトの状況のユーザーの利用状況を考慮する必要がある。

参考 https://www.php.net/manual/ja/function.session-regenerate-id.php
参考 https://blog.ohgaki.net/proper-session-id-management-php