SOY Shopのカートではセッションを利用しているわけだけれども、CSRF攻撃対策として、セッションを読み込む度にsession_regenerate_id()を実行して、PHPSESSIDの値を更新している。


先に結論を記載すると、スマホからアクセスがある場合はsession_regenerate_id()の使用を気を付けるべきらしい。


先日、AndroidのChromeでカート内で遷移すると、突然カートの中身が消えるという症状の連絡があった。

調査をしてみると、カートの中身が消えずに注文を終了出来る時もあったり、カートに商品を入れた直後にカートの中身が消えるということもあった。


カートの中身のデータが消えるタイミングがわからず原因を特定する事ができずに2日程経過してしまった。

セッションの仕組みを見直そうと、PHP: session_regenerate_id - Manualのページを読んでみたら、

/******************************/

現在の session_regenerate_id は、不安定なネットワークをうまく扱えません。 たとえば、モバイルネットワークや WiFi ネットワークです。 よって、 session_regenerate_id を 呼ぶことで、セッションの消失を経験するかもしれません

/******************************/

と記載されていた。


常にsession_regenerate_id()を外すのは怖いので、SOY Shopのカートではスマホでアクセスの時はsession_regenerate_id()を実行しないという処理を追加してみた。


関連記事

SOY CMSでSameSite cookiesの対応を追加しました