Laravel 会话在 Carbon::setTestNow() 到期
Laravel session expiration on Carbon::setTestNow()
我在 laravel 4.2 项目上使用 Carbon::setTestNow()
进行测试,在我使用 Carbon::setTestNow()
系统的方法调用后进行下一次刷新时,我一直注销。
发生这种情况是因为会话 cookie 到期日期设置为 Carbon::setTestNow(
) 日期。我怎样才能覆盖它,因为一直重新登录很烦人。谢谢,希望有人能帮我找到一些解决办法。
同样的情况,结果如下:
"official way"是扩展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());
}
}
由于这个答案来晚了,希望能对以后的人有所帮助。
我在 laravel 4.2 项目上使用 Carbon::setTestNow()
进行测试,在我使用 Carbon::setTestNow()
系统的方法调用后进行下一次刷新时,我一直注销。
发生这种情况是因为会话 cookie 到期日期设置为 Carbon::setTestNow(
) 日期。我怎样才能覆盖它,因为一直重新登录很烦人。谢谢,希望有人能帮我找到一些解决办法。
同样的情况,结果如下:
"official way"是扩展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());
}
}
由于这个答案来晚了,希望能对以后的人有所帮助。