Php Laravel会话外观意外行为
在我的Laravel5.4项目中,我试图在我的控制器方法中存储一个状态令牌,如下所示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);
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)代码>在函数结束之前。我现在编辑了上面的问题来说明这一点,并且还包括了下面的解释供其他人参考。