Carbon::setTestNow() 上的 Laravel 会话过期

问题描述 投票:0回答:2

我在 Laravel 4.2 项目上使用

Carbon::setTestNow()
进行测试,并且当我在使用
Carbon::setTestNow()
的方法调用后进行下一次刷新时,系统会将我注销。 发生这种情况是因为会话 cookie 过期日期设置为
Carbon::setTestNow(
) 日期。我怎样才能覆盖它,因为总是再次登录很烦人。谢谢,希望有人可以帮助我找到解决方案。

laravel session cookies php-carbon
2个回答
3
投票

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

“官方方式”是延长

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

由于这个答案来晚了,希望它可以帮助以后的人。


0
投票

就我而言,只需将 .env SESSION_LIFETIME 变量设置为几年就足以解决问题。

SESSION_DRIVER=cookie
SESSION_LIFETIME=999999999

我的会话在 setTestNow() 日期一个月后突然停止工作,因为我已将 SESSION_LIFETIME 设置为一个月。

© www.soinside.com 2019 - 2024. All rights reserved.