Laravel 5.2会话没有坚持下去

时间:2016-07-12 19:38:21

标签: php laravel session authentication routes

在发布之前我已经搜索了很多,并且每个解决方案都有很多。我发现没有用。

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

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']);
  });
 });

Kernel.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');
}

存储和引导文件夹上的Chmod 777,会话驱动程序数据库。

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

我已经浪费了3天时间:/。

如果你们需要更多详细信息/代码只需说出这个词,我们将不胜感激。

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

这就是我遇到类似问题时的所作所为。请让我知道我的理解是正确的。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

新服务提供商注册了什么?

答案 4 :(得分:0)

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

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