2017-06-22 29 views
1

ある期間、ユーザーが自分のサイトに何回アクセスしたかを数えるミドルウェアを作成しようとしています。私は私のミドルウェアでlaravelセッションを使用しようとしました。ここに私のコードは次のとおりです。セッションがミドルウェアで動作していませんlaravel 5.2

私のアプリで
class SessionHandler { 
public function handle($request, Closure $next){ 
    if(!Session::has('count')){ 
     Session::set('count', 1); 
     Session::save(); 
    }else{ 
     $numOfVisits = Session::get('count'); 
     $numOfVisits++; 
     Session::set('count', $numOfVisits); 
     Session::save(); 
    } 
    dd(Session::get('count')); 
} 
} 

\のHttp \ kernel.php私はSessionStartミドルウェア後にミドルウェアを追加しました:

protected $middleware = [ 
    .... 
    \Illuminate\Session\Middleware\StartSession::class, 
    \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
    .... 
    \Dideo\Http\Middleware\SessionHandler::class, 
]; 

が、私は、私は応答が1で取得ページを更新するたびにセッションが設定されていないことを意味します。

laravelミドルウェアでセッションを処理するにはどうすればよいですか?

[EDIT]

私はこの問題はEncryptCookieミドルウェアであることがわかりました。私のセッションドライバはデータベースで、ページを更新するたびにレコードがセッションテーブルに追加されます。

EncryptCookieミドルウェアを無効にすると、この問題は解決されます。

+0

それを行うだろう:: =( 'count')) '(値が '1'でインスタンス化されていない場合は –

+0

が解決されましたが、同じ問題が残っています – Alireza

答えて

0

「IF」条件が間違っています。毎回カウントを1に設定しています。最初の訪問の場合は「count + 1」に設定します(したがって1も同様です)。 !それは何をやっているのです: - `の場合(セッション>

if (isset($a)) { 
    $a = 1; //set $a to 1 
} else { 
    $a = $a + 1; //set $a to 1 again 
} 
0

あなたのコード内の小さな論理的な問題があるようだ、それはすべきではない、私はこの方法

public function handle($request, Closure $next){ 
    $value = 1; //Initially it is 1 
    if(Session::has('count')){ //If a previous save has been made take that value 
     $value = Session::get('count') + 1; //add 
    }// do not need an else block, first call will save value of 1 
    Session::set('count', $value); //Set it to 1 (first call) or the incremented value 
    Session::save(); 
    dd(Session::get('count')); 
} 
+1

私のコードで論理エラーが修正されました 問題はlaravelセッション – Alireza

関連する問題