質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

7060閲覧

リダイレクト先でセッションが取得できないことがある

poteto4401

総合スコア57

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2019/03/12 09:16

編集2019/03/31 09:05

発生している問題

フロントから取得した値をセッションへ保存し、リダイレクト先でその値を表示させているのですが、
まれにリダイレクト先でセッションの値が取得できないことがあり困っております。

また、困ったことにローカル環境では発生しなく、本番環境のみで発生します。
ブラウザはIE、Chrome、その他でも関係なく起こるのですが、発生条件はわかりません。

これ以外に提示する情報が思いつかないのですが、疑ってみるポイント等ご教授いただけると幸いです。

該当のソースコード

ざっくりですが以下のような内容になります。

php

1public function store(Request $request) 2 { 3 $input = $request->input(); 4 $request->session()->put('input', $request->input()); 5 6 // ここで$request->session()->exists('input')を確認しましたが、ありました。 7 8 Item::create([ 9 'user_id' => Auth::id(), 10 'item_type' => config('ITEM_TYPE'), 11 'result' => $input['result'], 12 ]); 13 14 // DBにも値は格納されています。 15 16 return redirect()->route('item.result'); 17 } 18 19 public function result(Request $request) 20 { 21 // ここで$input['result']が空になることがあります。 22 return view('result') 23 ->with([ 24 'user' => Auth::user(), 25 'input' => $request->session()->get('input'), 26 ]); 27 }

php

1//SESSION_DRIVER=file 2'driver' => env('SESSION_DRIVER', 'file'), 3//SESSION_LIFETIME=120 4'lifetime' => env('SESSION_LIFETIME', 120),

js

1<template> 2 <div> 3 //... 4 <input name="result" :value="itemType"> 5 // ... 6 <input type="submit" value="finish"> 7 </div> 8</template> 9 10<script> 11export default { 12 props: { items: Array }, 13 data: function() { 14 return { 15 // ... 16 itemType: 0 17 // ... 18 }; 19 }, 20 methods: { 21 set: function() { 22 //itemsに値をいれる 23 }, 24 } 25} 26</script>

試したこと

リダイレクト前にDBにも値を保存しているのですが、DBには問題なく書き込まれています。
リダイレクト前にセッションに保存できているかログを仕込んで確認してみましたが、セッションには問題なく保存できているようでした。

(追記)
キャッシュに変更しても読み込まれないことがありました。

補足情報(FW/ツールのバージョンなど)

Laravel 5.7
Vue.js 2.5
Ubuntu

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

根本解決ではないかもしれませんが、セッションではなくキャッシュに変更しました。
リダイレクトのタイミングでセッションが保存できないことがあったのかもしれません。

Laravelの場合、セッションの情報はレスポンスを返す直後に保存されるためです。
https://teratail.com/questions/54205#reply-86859

投稿2019/03/14 14:39

poteto4401

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

本番環境のサーバ構成は2台以上で冗長化されて、ロードバランサによって振り分けとかやっていますか?

laravelのセッションの保持方法がファイルの場合、以下のような流れが発生した時に、
存在しないファイルを参照するためセッションが取れない場合があります。

初回にWEBサーバAにアクセス ↓ WEBサーバAでセッションのファイルを生成する ↓ その後のアクセスでロードバランサによりWEBサーバBにアクセス ↓ WEBサーバAで生成されたファイルを参照するが、WEBサーバBには存在しないためセッションを見つけれない

投稿2019/03/14 07:11

yoneshu_pro

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poteto4401

2019/03/14 14:34

それが1台構成なのですよね。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問