在Carbon :: setTestNow()上的Laravel会话到期

时间:2016-04-27 08:51:33

标签: laravel session cookies php-carbon

我在laravel 4.2项目中使用Carbon::setTestNow()进行测试,并且在我使用Carbon::setTestNow()系统的方法调用之后进行下一次刷新时,系统会将我记录下来。 这是因为会话cookie到期日期设置为Carbon::setTestNow()日期。我怎样才能覆盖它,因为它总是让你再次登录很烦人。谢谢,希望有人能帮我找到解决方案。

1 个答案:

答案 0 :(得分:2)

刚刚遇到同样的情况,结果如下:

“官方方式”是扩展Illuminate\Session\Middleware::addCookieToResponse::getCookieLifetime

但我发现它非常复杂和臃肿。 来一个简单的解决方案:

检查提供的模拟时间是否来自过去,如果需要,覆盖session.lifetime,这是我添加到app/start/global.php的代码块

// Set mock time if requested
if ( ! empty($_GET['mocktime'])) {
    try {
        $real_time = \Carbon\Carbon::now();
        $mock_time = \Carbon\Carbon::parse($_GET['mocktime']);

        \Carbon\Carbon::setTestNow($mock_time);

        $diff_min = $real_time->diffInMinutes($mock_time);
        if ($diff_min > 0) {
            // requested mock time is from the pass
            $org_lifetime = Config::get('session.lifetime');
            Config::set('session.lifetime', $diff_min + $org_lifetime);
        }

    } catch (Exception $ex){
        Log::warning('Mocktime requested but unable to set: '.$ex->getMessage());
    }
}

由于这个答案迟到了,希望以后可以帮助别人。