【问题标题】:How to prevent lost session value in laravel 5.2 when redirect from any controller to another controller?从任何控制器重定向到另一个控制器时,如何防止 laravel 5.2 中丢失的会话值?
【发布时间】:2018-12-13 09:29:18
【问题描述】:

我正在尝试在 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');
});

MembersController 看起来像

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();
}
}

我尝试在 index fuction() 中获取会话数据,结果为空。请给我正确的解决方案?

【问题讨论】:

  • (1)什么是会话存储? (2) laravel cookie 有吗?
  • @Bagus Tesa 21 我正在使用文件驱动程序。这是来自laravel.com/docs/5.6/session 的关于会话的用户指南
  • could you check on browser console 用于 laravel cookie (laravel_session)?因为要将用户与会话联系起来,需要一个 cookie。如果 cookie 以某种方式丢失,则每个请求都可能呈现为新会话。
  • 你试过laravel默认Auth系统吗?
  • @Alimin 我的错,你去吧....laravel.com/docs/5.2/authentication

标签: laravel session


【解决方案1】:

您需要使用flash方法来保留请求之间的会话数据:

$request->session()->flash('session_login', $data);

然后reflash()keep 可用于更多请求:

$request->session()->reflash();

$request->session()->keep(['session_login']);

有时您可能希望将项目存储在会话中仅用于下一个请求。您可以使用 flash 方法执行此操作。

如果您需要为更多请求保留闪存数据,您可以使用刷新方法,该方法将保留所有闪存数据以用于其他请求。如果只需要保留特定的flash数据,可以使用keep方法。

Flash Session Data

更新

确保已将 \Illuminate\Session\Middleware\StartSession::class 添加到 Kernel.php 中的 web 中间件组。

【讨论】:

  • 我试试你的解决方案。现在我在 Request.php 第 870 行收到错误消息 RuntimeException: Session store not set on request。
  • 请确保您的内核中启用了\Illuminate\Session\Middleware\StartSession::class
  • 这是哪个文件\Illuminate\Session\Middleware\StartSession::class 我已经打开了Kernel.php但没有找到任何东西
  • 它在 web 中间件组中。这是默认值:github.com/laravel/laravel/blob/master/app/Http/Kernel.php
  • 是的,我解决了我的问题,我在 Kernel.php 更改了这个我正在更新受保护的 $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, ];被保护 $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\ Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多