PHP

PHP7でsession_regenerate_id()でFailed to create(read)というエラーが出る場合の対策

久しぶりに昔のPHPのコードを触る機会がありPHP5系からPHP7系にアップデートしていた時のことです。Sessionハンドラーでmysql関数が使われていたのでpdoに書き直していたところこんなエラーが出てくるようになってしまいました。

Catchable fatal error: session_regenerate_id(): Failed to create(read) session ID: user (path: /var/lib/php/sessions) in /app/src/handler/session.php on line 18

session_regenerate_idはSessionIDを再発行してくれるものなんですが、readメソッドが文字列を返していない時にこのようなエラーが出てくるようでした。

絶対文字列を返しているつもりだったんですが、まじまじと眺めて、最終的に返す値の型をよくチェックしたら文字列型が返っていなかったみたい。思い込みって恐ろしいですね。

参考

https://www.glenscott.co.uk/fixing-session_regenerate_id-failed-createread-session-id-error/