我在 Laravel 4.2 项目上使用
Carbon::setTestNow()
进行测试,并且当我在使用 Carbon::setTestNow()
的方法调用后进行下一次刷新时,系统会将我注销。
发生这种情况是因为会话 cookie 过期日期设置为 Carbon::setTestNow(
) 日期。我怎样才能覆盖它,因为总是再次登录很烦人。谢谢,希望有人可以帮助我找到解决方案。
遇到同样的情况,结果如下:
“官方方式”是延长
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());
}
}
由于这个答案来晚了,希望它可以帮助以后的人。
就我而言,只需将 .env SESSION_LIFETIME 变量设置为几年就足以解决问题。
SESSION_DRIVER=cookie
SESSION_LIFETIME=999999999
我的会话在 setTestNow() 日期一个月后突然停止工作,因为我已将 SESSION_LIFETIME 设置为一个月。