2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【laravel 本番環境】リダイレクト時、sessionがうまく機能しない原因と問題の解明

Posted at

○起こっていること

ログイン後リダイレクトするのですが、ログインユーザーの情報をsessionに保持させています。

しかしながら、リダイレクト時には反映がなされず、リロードすると読み込める状態です。

ローカル環境での開発時にはこのようなことはなかったのですが、解決していきたいと思います。

○解決方法

結論として取った方法ですが、

  • redirect()view()に変更
  • flashメッセージではなく、sessionにデータを持たせることで解決しました。

(修正前のコード)

sample.php
return redirect()->route('top')->with('message', 'ログイン完了');

(修正後のコード)

sample.php
// sessionに保存
session([
    'register.name' => 'laravel',
]);

// ①、②はどちらかそれぞれの状況によって

// ①$requestをsessionに保存するパターン
$request->session()->flash('message', '$requestからのsession');

// ②Sessionファザードを使用するパターン
Session::flash('message', 'Sessionファザード');

return view('sample');

(ブレード:sample.blade.php)

sample.html
<div @if(session('message')) flex @else hide @endif">
    <div class="content">
        <p class="text">{{ session('register.name') }} さん</p>
        <p class="text">{{ session('message') }}</p>
        <button class="btn close" id="close"></button>
    </div>
</div>

○そもそも、原因は?

原因は、

Laravelのセッションの情報はレスポンスを返す直後に保存されるためです。

そのため、レスポンスを返していないリダイレクトでは、sessionが保存されていない。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?