在我的Laravel 5.4项目中,我试图在我的控制器方法中存储一个状态标记,就像这样..
use Illuminate\Support\Facades\Session ;
...
public function authorize()
{
Session::set('state', $client->getState());
A lot of code here...
header('Location: ' . $authorizationUrl);
exit;
}
我也尝试过使用辅助函数
session('state', $client->getState());
但无论我尝试过什么,都不会创建或持续会话。
所以我转而直接使用Symfony组件..
use Symfony\Component\HttpFoundation\Session\Session;
...
public function authorise()
{
$session = new Session();
$session->set('state', $client->getState());
...
}
这样做非常有效。任何解释为什么外立面不起作用?
答案 0 :(得分:0)
作为参考,如果其他人有这样的问题,问题是由函数完成之前的重定向,oauth url,或者视图加载等引起的(即会话存储在最后Laravel应用程序“生命周期”。)此问题可以在除重定向之外的任何情况下表现出来,包括使用dd()
或die()
等。
e.g。如果您的方法基本上像这样Sessions工作正常。
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;
}