Laravel 5.2 会话不持久

Posted

技术标签:

【中文标题】Laravel 5.2 会话不持久【英文标题】:Laravel 5.2 Sessions not persisting 【发布时间】:2016-11-15 04:58:53 【问题描述】:

在发布之前我已经搜索了很多,我发现的每个“解决方案”都不起作用。

我无法从与当前路由不同的路由获取会话值。

Routes.php

Route::group(['middleware' => 'web', 'prefix' => 'blog', 'namespace' => 'Modules\Blog\Http\Controllers'], function()


Route::get('/','PostController@index');

Route::get('/home',['as' => 'home', 'uses' => 'PostController@index']);

Route::get('auth/login', 'Auth\AuthController@showLoginForm');

Route::post('auth/login', 'Auth\AuthController@login');


 Route::group(['middleware' => 'blog.auth'], function()
  Route::get('/admin',['as'=>'dashboard','uses'=>'AdminController@index']);
  );
 );

内核.php

protected $middlewareGroups = [
    'web' => [
        \ommitedbutcorrect\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class
    ],

    'admin' => [
        \Modules\Admin\Http\Middleware\ControllerResolver::class,
    ],
    'admin.auth' => [
        \Modules\Admin\Http\Middleware\AdminAuthenticate::class,
    ],
    'blog.auth' => [
        \Modules\Blog\Http\Middleware\BlogAuthenticate::class,
    ],
    'api' => [
        'throttle:60,1',
    ],
];

AuthController.php

class AuthController extends Controller



use AuthenticatesAndRegistersUsers, ThrottlesLogins;


protected $redirectTo = '/blog/admin/';


public function __construct()

    $this->middleware($this->guestMiddleware(), ['except' => 'logout']);


public function login()

    dd(\Session::get('foo'));
    $userdata = array(
        'email'     => Input::get('email'),
        'password'  => Input::get('password')
    );

    if (\Auth::attempt($userdata)) 
        \Session::save();
        return redirect($this->redirectTo);
        
        else
            return 'f*ck';
    


public function showLoginForm()

    \Session::put('foo', 'bar');
    return view('blog::Admin.login');

在 Storage 和 Bootstrap 文件夹、会话驱动程序数据库上使用 Chmod 777。

似乎会话每次都在通过请求创建自己,这可以解释为什么我无法使用 Session:get('foo') 获取值,现在返回 null。

我已经为此浪费了 3 天时间:/.

非常感谢您的帮助,如果你们需要更多详细信息/代码,请直接说出来。

【问题讨论】:

【参考方案1】:

我不确定为什么 Laravel 在错误的数组中附带会话中间件,但将 StartSession 中间件移到受保护的中间件组中

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Session\Middleware\StartSession::class,
];

【讨论】:

刚刚做了,还在打印 Null。【参考方案2】:

通过使用 php artisan cache:clear 清除缓存修复

我的项目是从另一个人那里得到的,所以无论我做了什么更改,它都使用缓存的设置(在这种情况下,它使用的是 DB 会话,我想使用基于文件的会话)

【讨论】:

【参考方案3】:

我猜是因为你使用了模块而不是 laravel 提供的默认结构。

在 laravel 5.2 中默认所有路由都与 web 中间件绑定,但是,您使用模块并且每个模块都有一个单独的 routes.php 文件。您必须再次手动将路由与 Web 中间件绑定,否则您的会话将丢失。

当我遇到类似问题时,我就是这样做的。请让我知道我的理解是正确的。

【讨论】:

【参考方案4】:

如果您使用的是 Laravel >= v5.2.27,则需要从您的 app/Http/routes.php 文件中删除 web 中间件。从 v5.2.27 开始,app/Http/routes.php 文件中的所有路由都已包含在 web 中间件组中,因此在文件中再次添加中间件会导致会话混乱。

【讨论】:

我的是 5.2.39 版,如果我从路由文件中删除 web 中间件,它也不起作用(甚至 laravel_session 也没有创​​建)【参考方案5】:

注册了哪些新的服务提供商?

【讨论】:

Errrm,再来一次? 显示数组'providers' => [...] config/app.php 文件

以上是关于Laravel 5.2 会话不持久的主要内容,如果未能解决你的问题,请参考以下文章

不支持驱动程序 [会话]。在 laravel 5.2 错误?

Laravel 5.2 - 会话不会在路由更改中持续存在

重定向到外部网站时,Laravel 会话不持久

升级到 Laravel 5.2 会使所有会话失效

Laravel 5.2:如何从自己的事件监听器访问请求和会话类?

Laravel 5.2:如何从自己的事件监听器访问请求和会话类?