案例
使用Middleware
,Session
& Carbon
检查session/shopping cart
是否已创建longer than 20 minutes ago
,以便刷新会话。 (路由在中间件内分组)
当前数据正在Homestead上运行,但在我的实时网站上出现同样的问题,该网站正在数字海洋服务器上运行
class CheckCart
{
public function handle($request, Closure $next)
{
// Defining current timestamp
$now = Carbon::now();
// created_at from the session
$created_at = $request->session()->get('created_at');
// If the cart count is == 1, & created_at is null -> put created at date in session
if (Cart::count() == 1 && $created_at == null) {
$request->session()->put('created_at', $now);
}
// If created at date + 20 minutes is earlier than current time, flush (empty) session
if ($created_at != null) {
if ($created_at->addMinutes(20) < $now) {
$request->session()->flush();
}
}
return $next($request);
}
}
问题
Local time
是2017-01-06 00:00
Carbon::now()
是2017-01-05 23:25
created_at
时间戳(最终由Carbon::now()
设置)为2017-01-06 03:20
这些时间戳如何差异如此之大,尤其是created_at
在某个时刻由Carbon::now()
定义的时间至少可以达到7小时?
Europe/Amsterdam
答案 0 :(得分:1)
问题在于$created_at->addMinutes(20)
。每次执行代码时(使用刷新,请求或其他内容),它会为会话值增加20分钟。然后还有关于Homestead的时间与实际机器不同的评论中提到的问题。
要解决created_at
问题,您应该通过执行$created_at->copy()->addMinutes(20)
复制它。将此技巧与所有其他代码一起应用,其中实际需要副本而不是对象本身。希望有所帮助!