LoginSignup
9
8

More than 5 years have passed since last update.

異なるサブドメイン間のLaravelでセッションを維持する

Posted at

はじめに

1台のマシン上にバーチャルホストで複数のサイトを運用していたとします。
DBは共通で、同じドメインのサブドメインで運用されたLaravelのサイトだったとします。

sample01.example.jp
sample02.example.jp

ここまでくると、片方でログインしたらもう一方でもログイン状態を維持したい、という要望だって出てくるでしょう。

セッション管理をRedisで行う選択肢が取れる場合、Laravelであれば特別なことは何もせずに達成可能です。

解決方法

クッキーのdomain属性を利用します。
ドメイン名が後方一致する場合のみクッキーを送信する、という条件です。

Laravelであれば設定ファイルのsession.phpか.envファイルにてSESSION_DOMAINを設定する事で利用できます。

.env
SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_DOMAIN='.example.jp'

REDIS_HOST=xxx.cache.amazonaws.com
REDIS_PASSWORD=null
REDIS_PORT=6379

注意点

.envファイルで設定したのに、別のサイトへ移動した瞬間にログアウトされる問題に悩まされた事がありました。

原因は、一報ではミドルウェアグループでセッションミドルウェアを呼び出し、
もう一方ではグローバルミドルウェアでセッションミドルウェアを呼び出していたためでした。

app/Http/Kernel.php
protected $middlewareGroups = [
    'web' => [
        \Illuminate\Session\Middleware\StartSession::class,
    ],
];
app/Http/Kernel.php
protected $middleware = [
    \Illuminate\Session\Middleware\StartSession::class,
];

おわりに

Laravelは大変便利ですが、出来ることが多すぎて些細な?設定ミスで動かなくなる事があり悩まされます。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8