2016-04-27 144 views
1

我正在使用Carbon::setTestNow()进行laravel 4.2项目的测试目的,并且在我使用Carbon::setTestNow()系统登录的方法调用之后进行下一次刷新的所有时间。 这是因为会话cookie过期日期设置为Carbon::setTestNow()的日期。我怎么可以重写这个,因为它很烦人再次登录。谢谢,希望有人能帮我找到解决办法。Laravel对Carbon的会话过期:: setTestNow()

回答

1

就得出了同样的情况,这里的结果:

“官方途径”是扩展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()); 
    } 
} 

添加为这个答案的代码块来晚了希望以后能帮助别人。

+1

使几乎相同的解决方法,谢谢你的答案。希望它会对其他人有所帮助 –