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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Q&A

1回答

1277閲覧

[Laravel] reloadするとSessionの値をgetできない問題

kazoogon

総合スコア281

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

0グッド

0クリップ

投稿2019/07/07 08:35

編集2019/07/12 15:00

環境

Laravel5.8
Redis (aws elasticache)
実現しようとしていること

ECサイトで買い物カゴ情報をRedisで管理。
商品追加ボタンでRedisにjsonで情報を追加 → 商品カゴページでその情報を表示したい
現状

▼商品追加ボタン押下後のadd function(CartController)

public function add(Request $request) { //商品情報をjson形式にし、$cartJsonに入れる(省略) Session::put('cart', $cartJson); Session::save(); echo Session::get('cart');//このようにsave()の直後にgetはできる(echoで表示される) }

▼買い物カゴ一覧ページ(CartController)

public function list() { $cart = json_encode(json_decode(Session::get('cart'))); Session::all() //**[]が返る return $cart;//Nullが返る }

なぜ買い物カゴ一覧ページに移動するとSessionの値が取れないのかが不明で、解決できないのでこちらにて質問させていただきました。

他ファイルの情報が必要な場合追記していこうと思いますので、遠慮なくお申し付けくださいませ。

追記(テストページをrouteに作成してみた結果)

下記のようにrouteを設定し (url)/session-page-testを見ると、正常に「longtime」と表示されている + redisにも登録されている

Route::get('session-page-test', function () { session(['test' => 'longtime']); return session('test'); });

しかしCartController内ではsession helperが全く動作しない(Redisに登録もされない)

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

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

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

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

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

m.ts10806

2019/07/07 11:59

$cartJsonはどういう内容を保持しているのでしょうか。 >echo Session::get('cart'); 何が出るのでしょうか >$cart = json_encode(json_decode(Session::get('cart'))); なぜわざわざdecodeのあとにencodeするのでしょうか。
takasima20

2019/07/07 12:13

素直に考えたら session_start() 出してないんじゃないの?
kazoogon

2019/07/07 14:35

session_start()しても結果は変わりませんね。。
m.ts10806

2019/07/07 20:02

フレームワークでsession_startを自前で書くことはないですよ
takasima20

2019/07/07 23:46

念のために書くと… session_start() を出している「なにか」がうまく使えてないんじゃないの? って意味です。
mikkame

2019/07/08 04:46

session_start使ったらそもそもredisに保存とかじゃなくてfileで保存されちゃうしね・・・ あとsession_startしなくてセッション使ったらwarnとかでないっけ。 念の為確認ですが、storage/framework/sessions/以下にセッションファイルが作成されている、という事もないですよね?(filedriverになっている) あと背景的にはEB環境でセッションの共有が必要になった、みたいな感じでいいですか? (その場合filedriverでAPインスタンスを跨いだ場合セッションが消える)
guest

回答1

0

問題切り分けとして、セッションのドライバを、Redisでなくシンプルなfileにして最小限の問題領域で試していくと、解決の糸口が見つかるかと思います。

投稿2019/07/10 02:13

aro10

総合スコア4106

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

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

kazoogon

2019/07/12 22:41

ご回答ありがとうございます。 file, redisどちらも挙動は同じでした、CartController内でsession helperが正常に動作しないのが謎です。。
mikkame

2019/07/13 03:52

sessionをdbに保存した方が中身が確認しやすいのでは? ところで、保存したいjsonはちゃんとjsonにできているのか? (循環参照してたりしてencodeの段階でこけてないか?)
kazoogon

2019/07/13 08:09

> 循環参照してたりしてencodeの段階でこけてないか? session(['test' => 'longtime']); で登録されている情報をsession('test')で取ってこれないので、session helper functionがCartConttoller内で動作してないと予想つけております
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問