2017-06-22 121 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中间件中使用会话?

[编辑]

我发现,问题是与EncryptCookie中间件。我的会话驱动程序是数据库,每次刷新页面时都会在会话表中添加一条记录。

当我关闭EncryptCookie中间件时,问题得到解决。

+0

它不应该是 - >'如果(会话:: has('count'))'(如果没有值用'1'实例化? –

+0

修复它但仍然有问题 – Alireza

回答

0

您有错误的“如果”条件。您每次都将计数设置为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