会话不是用 Laravel 5 编写的

Posted

技术标签:

【中文标题】会话不是用 Laravel 5 编写的【英文标题】:Session is not written in Laravel 5 【发布时间】:2016-05-24 19:32:15 【问题描述】:

我正在寻求帮助。

我重新安装了 Laravel(这次是 5.2.15)。 我没有使用 Homested。 正如文档所建议的那样,我 chmod 'storage' 目录和子目录,给予写权限。 会话配置为默认,没有触及任何东西。所以会话驱动程序是“文件”,路径是“框架/会话”。

我写了这些测试路线:

Route::get('/', function () 
    session(["test" => "ok"]);
    return view('welcome');
);

Route::get('/2', function () 
    print "session = ".session('test');exit();
);

难道仅仅看到会话工作就足够了吗? session('test') 为空,并且框架/会话中没有文件写入。 可以肯定的是,Chmoded 777 框架/会话文件夹,没有任何改变。

我是 Laravel 的新手。也许我错过了什么? 我需要在 config/session.php 中设置这些变量吗?

'path' => '/',
'domain' => null,

谢谢

【问题讨论】:

Laravel - Session store not set on request的可能重复 查看链接的副本。如果您需要会话,您的路由应该在 web 中间件组中定义。 【参考方案1】:

试试这个:

Route::get('/', function () 
    Session::put('test', 'ok');
    return view('welcome');
);

Route::get('/2', function () 
    print "session = ".Session::get('test');exit();
);

【讨论】:

【参考方案2】:

如果你打开你的 app/Http/Kernel.php,你会看到 session 类是 'web' 组的一部分,所以默认不包含它:

 protected $middlewareGroups = [
        'web' => [
        ...
            \Illuminate\Session\Middleware\StartSession::class,
        ...
        ]
 ]

因此,您必须使用“web”中间件将路由包装在一个组中,或者将“web”中间件分别添加到每个路由:

Route::group(['middleware' => ['web']], function() 
    Route::get('/', function () 
        session()->put('test', 'ok');
        return view('welcome');
    );

    Route::get('/2', function () 
        return 'session = ' . session('test');
   );

【讨论】:

谢谢,这解决了我的问题。我阅读了整个文档,但我不清楚这一步是否必要。完全没有。谢谢。

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

Laravel 5.2 或 5.3:如何正确实施检查会话是不是已登录

我想自学laraver,请诸位前辈给一些建议,谢谢

php laravel框架学习笔记 基本工作原理

laravel框架总结 -- blade模板引擎

使用最新的 Laravel 版本

laravel 5.3会话访问购物车