2016-06-19 21 views
1

Laravelでグローバルセッションを設定する方法を教えてください。通常のPHPスクリプトでは、ブラウザが閉じるか関数session_destroy()/unset()が呼び出された場合、$_SESSION['myvar']のようなグローバルセッションが終了します。Laravelでアプリ全体のグローバルセッションを設定するにはどうすればよいですか?

私はLaravelでこれを試してみましたが、それはコントローラでは動作しませんBaseControllerを拡張します。私のコードのコンテキストがある

Session::set('id', $user->id); 
Session::get('id'); 

// ROUTES 
Route::get('/', '[email protected]'); 


// CONTROLLER 
class MyController extends Controller 
{ 
    public function setSession() 
    { 
     // ... 
    Session::set('id', $user->id); 
    return view('access'); 
    } 
} 


// VIEW -> LOST Session 
@if (Session::has('id') && Session::get('id') == 'hsdiwe78912hj') 
    I have access! 
@else 
    I must stay here! <!-- I always get this --> 
@endif 
+0

あなたは、データベースにセッションを保存しますか?どのセッションドライバを使用していますか?あなたはどこからID「hsdiwe78912hj」を取得しますか? $ user-> idもユーザーIDを返しますか?セッションは保存されていますか?Session :: all()ですべてのセッションを作成した場合の出力は何ですか? – bobbybackblech

+0

Laravelは、サービスプロバイダを使用して、ロジックコードを実行する前にアプリケーションを「設定する」/セットアップします。セッションは 'config/session.php'で設定されています。これは重要なファイルです(このファイルを表示せずにセッションが期待どおりに動作していないかどうか尋ねることはできません)。 – Arcesilas

+0

セッションのアイデアは、ブラウザが閉じた後に終了することですが、セッションの背後にあるアイデアは全部ですが、もっと永続的な解決策が必要な場合は、キャッシュドライバを試してみてください。あなたがlaravelのv5を使用している場合は、あなたは、UUコントローラまたは任意のセッションの名前空間をインポートしてください。 – ctf0

答えて

0

あなたが適切に定義されていないようです$user->id。これを試してみてください:

Session::set('id', Auth::id()); 
+0

@ mike-barwick私はファサードが消えているという印象を受けています。なぜファサードを使うのが好きですか? – Qevo

+0

あなたはそれを聞いてどこですか?笑Laravelがファサードをこすってしまうのは間違いないと思う。それらを使用する時間と場所があります。この場合、 'Auth'を使ったespですが、もっと短くてきれいです。もちろん、あまりにも自分のそれぞれ。 –

+0

男性自身からのファサードの詳細。 http://taylorotwell.com/response-dont-use-facades/ –

2

使用

Session::put('id', $user->id); 
Session::get('id'); 
Session::forget('id'); 
0

は、あなたのヒントをありがとう!私は知らなかった、LaravelはPHPのように通常の$ _SESSIONやsession_startを使わない。

昨日のヒント:設定/ session.phpを編集する必要があります。

'expire_on_close' => true, // expires when browser is closed 
関連する問題