【发布时间】: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