【问题标题】:session is not working in middleware laravel 5.2会话在中间件 laravel 5.2 中不起作用
【发布时间】:2017-11-25 11:10:09
【问题描述】:

我正在尝试创建一个中间件,用于计算用户在一段时间内访问我的网站的次数。我尝试在我的中间件中使用 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 中间件中使用 session?

[编辑]

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

当我关闭 EncryptCookie 中间件时,问题就解决了。

【问题讨论】:

  • 不应该是->if(!Session::has('count'))(如果没有值用1实例化?
  • 修复了,但还是遇到了同样的问题

标签: php session laravel-5.2


【解决方案1】:

你有错误的“IF”条件。您每次都将计数设置为 1。如果是第一次访问,则设置为“count + 1”(所以它也是 1)。这就是你正在做的:

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

【讨论】:

    【解决方案2】:

    您的代码中似乎有一个小逻辑问题,我会这样做

    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'));
    }
    

    【讨论】:

    • 我修复了代码中的逻辑错误,问题出在 laravel 会话中
    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 2016-08-25
    • 2015-06-30
    • 2016-11-27
    • 1970-01-01
    • 2017-08-08
    • 2014-09-14
    • 2018-01-22
    相关资源
    最近更新 更多