2017-01-31 18 views
3

Laravelのデフォルトの移行を追加して、データベースとのセッションを使用しました。その前に、私はファイルシステムを使用していました。私はこれをした:php artisan session:table私はすでにファイルセッションで使用していたすべての列を追加しました。この後、私はデフォルト値'driver' => env('SESSION_DRIVER', 'database'),config/session.phpを変更してから、私はLaravel 5.3:セッションデータベースが正常に動作しません

BROADCAST_DRIVER=log 
CACHE_DRIVER=file 
SESSION_DRIVER=database 
QUEUE_DRIVER=sync 

.envを変えたので、すべてが私のためにOKになりたい、私は、このコマンドを実行します。artisan admin:clear。コマンドは、このん:

public function handle() 
{ 
    Artisan::call('clear-compiled'); 
    Artisan::call('cache:clear'); 
    Artisan::call('config:clear'); 
    Artisan::call('view:clear'); 
    Artisan::call('route:clear'); 
} 

それから私は、このコマンドをrunned:composer dumpautoload、その後php artisan migrate

はたぶんすべてthosesのコマンドは必要ありませんが、私は設定で変更できますとき、私はいつもきれいにすることを好みます。

本当の問題
今、私はまだセッションファイルを取得していますし、私はまた、データベースにセッションを持っていますが、php artisan session:tableコマンドからのみデフォルト値6列が満たされています。その他の列の滞在はすべてnullです。

いくつか読んだ後、それはユーザーが認証()している間、データを変更することができるようにする方法ですので、私は、データベースを使用したいGOAL
が。私はセッションを使って見ています。例:

@if(Session::get('intellitaux_simple') == 1) 
    <li class="@if ($coreData['navChild'] == 'simple') active @endif"> 
     <a href="{{ url('/intellitaux/simple') }}">INTELLITAUX SIMPLIFIÉ</a> 
    </li> 
@endif 

セッションのデータがLogSuccesfulLogin.phpイベントを使用してユーザログの時点で追加されます。

いつか私はすでにログインしているユーザーへの新しいリンクにアクセスする必要がありますが、強制的にログアウトしてからログインする必要はありません。アクティブな場合、ユーザーのセッションで直接変更を適用したいと思います。だから、なぜ私のデータベースセッションがうまくいかないのかを理解する助けになるなら、私は感謝します。

私の目標に到達するより良い方法があると思うなら、お勧めします。

答えて

1

なぜあなたはbut only the default column from the php artisan session:table command are filledと書いていますか? session:tableは6つの分野だけでなく、1での移行を作成します。

Schema::create('sessions', function (Blueprint $table) { 
     $table->string('id')->unique(); 
     $table->integer('user_id')->nullable(); 
     $table->string('ip_address', 45)->nullable(); 
     $table->text('user_agent')->nullable(); 
     $table->text('payload'); 
     $table->integer('last_activity'); 
    }); 

あなたにもphp artisan session:table後約php artisan migrateは言及しませんでした。 6列テーブルを移行しましたか?

このテーブルには、次のファイル vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.phpに充填されています

$payload = ['payload' => base64_encode($data), 'last_activity' => time()]; 

    if (! $container = $this->container) { 
     return $payload; 
    } 
    if ($container->bound(Guard::class)) { 
     $payload['user_id'] = $container->make(Guard::class)->id(); 
    } 

    if ($container->bound('request')) { 
     $payload['ip_address'] = $container->make('request')->ip(); 

     $payload['user_agent'] = substr(
      (string) $container->make('request')->header('User-Agent'), 0, $ 
     ); 
    } 
+0

は、私は単にデフォルトとPHPの移行に関するいくつかの編集をした、ありがとう。私はDatabaseSessionHandlerについて知らなかった。 Session :: set( 'key'、value)を使用すると、認証ユーザーセッションの行内のセッションテーブルのキー列に値が置かれます。 –

+1

'Session :: set( 'key'、value)'は 'payload'フィールドのみを変更します。 –

+0

だから、各キーのすべての列を追加することは役に立たなかった。ありがとうございました!この場合、投稿に関連する2つの質問があります。 1.なぜ私はまだセッションファイルをstorage/framework/sessionsフォルダに入れていますか? 2.私はセッションテーブル内の同じuser_idに対して複数のセッション行を取得しました。認証されたユーザーが使用する方法を見つける方法はありますか? –

関連する問題