Laravel 会话外观意外行为
Laravel Session Facade unexpected behaviour
在我的 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());
...
}
这样做效果很好。任何解释为什么立面不起作用?
作为参考,如果其他人有这样的问题,问题是由重定向引起的,在函数完成之前,或加载视图等(即session 存储在 Laravel 应用程序 "lifecycle" 的末尾。)除了重定向,包括使用 dd()
或 die()
等等
例如如果您的方法基本上像这样,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()
方法添加到会话 class(如果使用 Facade),如下所示。
public function myCoolMethod($authUrl)
{
Session::put('theKey','theValue');
Session::save();// Session gets stored immediately
header('Location: ' . $authUrl);
exit;
}
在我的 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());
...
}
这样做效果很好。任何解释为什么立面不起作用?
作为参考,如果其他人有这样的问题,问题是由重定向引起的,在函数完成之前,或加载视图等(即session 存储在 Laravel 应用程序 "lifecycle" 的末尾。)除了重定向,包括使用 dd()
或 die()
等等
例如如果您的方法基本上像这样,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()
方法添加到会话 class(如果使用 Facade),如下所示。
public function myCoolMethod($authUrl)
{
Session::put('theKey','theValue');
Session::save();// Session gets stored immediately
header('Location: ' . $authUrl);
exit;
}