laravel - 从任何控制器重定向到另一个控制器时,如何防止 laravel 5.2 中丢失的会话值?
问题描述
我正在尝试在 laravel 5.2 中制作登录系统,我使用 put 方法存储会话数据。这是我的登录控制器,我在 displayHome() 函数中存储会话数据
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\app_users;
use Redirect;
use Session;
use Crypt;
class login extends Controller
{
function displayHome(){
$request->session()->put('session_login',array('email'=>'someone@gmail.com','username'=>$'someone'));
//print_r(session('session_login')); die();
//`data session successfully stored `
}
}
我已经printr()
会话值。一切正常并存储会话。但是当我重定向到另一个控制器时,会话失去了它的价值,这就是我重定向到另一个控制器的方式
return Redirect::to('members');
我的路线成员看起来像
Route::group(['module' => 'Members', 'middleware' => ['web'], 'namespace' => 'App\Modules\Members\Controllers'], function() {
Route::get('members','MembersController@index');
});
成员控制器看起来像
namespace App\Modules\Members\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
Use Redirect;
use Session;
class MembersController extends Controller
{
function index(){
//data session is empty
print_r(session()->get('session_login')); die();
}
}
我尝试在索引函数()中获取会话数据,结果为空。请给我正确的解决方案来解决这个问题?
解决方案
您需要使用该flash
方法在请求之间保留会话数据:
$request->session()->flash('session_login', $data);
然后reflash()
andkeep
可用于更多请求:
$request->session()->reflash();
$request->session()->keep(['session_login']);
有时您可能希望将项目存储在会话中仅用于下一个请求。您可以使用 flash 方法执行此操作。
如果您需要为更多请求保留闪存数据,您可以使用刷新方法,该方法将保留所有闪存数据以用于其他请求。如果您只需要保留特定的闪存数据,则可以使用 keep 方法。
更新
确保您已添加\Illuminate\Session\Middleware\StartSession::class
到.web
Kernel.php
推荐阅读
- python - Selenium 返回错误的元素,选择第一个兄弟元素而不是查看元素本身
- react-native - 使用电子邮件创建用户的 Firebase 身份验证
- javascript - 如何在 Owl 轮播导航按钮中添加“边框”(大约下一个和上一个)
- javascript - 如何将功能组件中的道具添加到类组件中?
- angular - 角度嵌套表单数组映射问题
- python - numpy/pandas 矢量化自定义 for 循环
- swift - Swift - 动画后恢复 x 位置
- flutter - Flutter Renderflex问题
- javascript - 将自定义主机标头添加到超测请求
- java - 使用远程调试运行 docker-compose。英特尔,Java 11