Php Laravel会话外观意外行为

Php Laravel会话外观意外行为,php,laravel,session,laravel-5.4,php-7.1,Php,Laravel,Session,Laravel 5.4,Php 7.1,在我的Laravel5.4项目中,我试图在我的控制器方法中存储一个状态令牌,如下所示 use Illuminate\Support\Facades\Session ; ... public function authorize() { Session::set('state', $client->getState()); A lot of code here... header('Location: ' . $authorizationUrl);

在我的Laravel5.4项目中,我试图在我的控制器方法中存储一个状态令牌,如下所示

 use Illuminate\Support\Facades\Session ;
 ... 
 public function authorize()
 {
    Session::set('state', $client->getState());

       A lot of code here...

    header('Location: ' . $authorizationUrl);
        exit;
 }
我还尝试使用helper函数

  session('state', $client->getState());
但无论我尝试了什么,会话都不会创建或持续

所以我转而直接使用Symfony组件

use Symfony\Component\HttpFoundation\Session\Session;
...
public function authorise()
{
   $session = new Session();
   $session->set('state', $client->getState());
   ...
}

这样做效果很好。任何关于facade不工作的解释?

作为参考,如果其他人有这样的问题,该问题是由于在函数完成之前重定向到oauth url或加载视图等引起的(即会话存储在Laravel应用程序“生命周期”结束时)除了重定向之外,此问题可以在任何情况下出现,包括使用
dd()
die()

e、 g.如果你的方法基本上是这样的话,那么会话就可以了

public function myAwesomeMethod($params)
{
    Session::put('theKey','theValue');

    return view('theView'); //Session gets stored at this point.
}
然而,如果您的方法看起来像这样,您将有一个问题

public function myCoolMethod($authUrl)
{
    Session::put('theKey','theValue');

    header('Location: ' . $authUrl); //Session seems to be lost here.
    exit;
}
解决方案很简单,但我错过了,因为我不熟悉Laravel会议。在上一个示例中,只需将
save()
方法添加到Sessions类(如果使用Facade),如下所示

public function myCoolMethod($authUrl)
{
     Session::put('theKey','theValue');
     Session::save();// Session gets stored immediately

     header('Location: ' . $authUrl); 
     exit;
 }

$client->getState()
返回什么?我的第一句话“存储状态令牌”。它只是用于防止Oauth2请求中出现CSRF的随机字符串。e、 g.
LWy7LLRNZc1uXTfe4vXtsXbwGK4Ll7Jd5dEo7QFw
在排除故障时,我已经测试了这一可能的原因,当然,我只是硬编码了一个键和值,比如“mykey”、“myvalue”,而没有使用该函数。检查您的存储文件夹permissions@Amr谢谢你的帮助。事实证明,我没有提供我应该提供的所有信息。我正在实现一个第三方脚本,并在我的问题中过分简化了它。我应该提到发生了重定向
header('Location:'。$authUrl)在函数结束之前。我现在编辑了上面的问题来说明这一点,并且还包括了下面的解释供其他人参考。