我正在尝试创建一个中间件,用于计算用户在一段时间内访问过我的网站的次数。我尝试在我的中间件中使用laravel会话。这是我的代码:
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'));
}
}
在我的app \ 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 :(得分:0)
你有错误的“IF”条件。您每次都将计数设置为1。如果是第一次访问,则设置为“count + 1”(因此它也是1)。这就是你正在做的事情:
if (isset($a)) {
$a = 1; //set $a to 1
} else {
$a = $a + 1; //set $a to 1 again
}
答案 1 :(得分: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'));
}