この記事で伝えたいこと
会員登録のあるサイトでは、CloudFrontのキャッシュポリシーは「Caching Disabled」にすること。さもないとユーザ間でセッション情報が共有されてしまう可能性がある。この問題が見つかった時に検索してもなかなか情報にたどり着かなかったので書き残しておきます。
※解決された方は筆者ではありません。(筆者はAWSについては全く詳しくないです)
経緯
Laravelによる新規ECサイト開発の中盤で発覚。テスト環境を複数人が操作していた時に、カートの中身がいつの間にか変わっている現象がたまに起こりました。カートの中身だけでなく、マイページで情報を参照したら他人のアカウントでいつの間にかログインしていることになっていました。どうやら複数人で同時にAuthを同じルートで参照することで後にアクセスした人がその前にアクセスした人のユーザ情報を参照してしまうようでした。
解決
結局は最初に書いたようにCloudFrontのキャッシュポリシーの初期設定が「Caching Disabled」になっていなかったことで意図せずユーザ情報をキャッシュしてしまっていたことが原因でした。が、答えにたどり着くまで2週間強もの間、・Authの呼び出し方が悪いのかも ・Routeの設定が悪いのかも とLaravelのロジック側の問題ではないかとも考え既存のコードの修正を何回も行い、またはAWSのセッション管理の設定が悪いのではとRedisに切り替えなどで先輩のエンジニアたちが時間を溶かしました。なぜセッションが共有されてしまうのか、検索しても答えにたどり着かなかったのです。
備忘録としてここに記します。Amazon CloudFront のキャッシュポリシーは「Caching Disabled」にしないと、セッション情報が共有されてしまう場合がある、と。