友人からLaravel周りの相談を受けることが度々あるので、備忘録として残してみる。
相談内容
2つのLaravelベースのサイトを作成している。
それぞれドキュメントルートのサブディレクトリとしてデプロイしている。
[イメージ]
hogehoge/app1
hogehoge/app2
それぞれLaravel標準の認証機能を使っている。
片方のサイトでログインした状態でもう片方のサイトにログインすると、先にログインしていた方がログアウトされる。
[イメージ]
- app1にログイン
- app2にアクセス
- app2にログイン
- app1にアクセス ← ログアウトされてる!
聞かれたこと
なぜ発生するの?
⇒ ログイン情報をブラウザが保持するのにcookieを使っていて、同じcookie名だから後からログインしたサイトの方で上書きされる。
WEBサーバ(nginx)のせい?
⇒ No. Cookieを設定するのはあくまでアプリケーション。
Cookieはブラウザでドメイン単位で管理される。サブディレクトリ運用=同一ドメインなので、サブディレクトリのアプリそれぞれが同じ場所にCookieを保存する。
そのため、同名のCookieは衝突してしまい、後から更新したほうで上書きされてしまう。
解決方法
.env
でcookieのプレフィックスを指定することでサイト間でセッションIDのcookieが同じキーで重複しないようにできる。
SESSION_COOKIE=app1