Session不是在Laravel 5中编写的。

16 浏览
0 Comments

Session不是在Laravel 5中编写的。

我正在寻求友善的帮助。\n我完成了Laravel的全新安装(目前版本为5.2.15)。\n我没有使用Homestead。\n我按照文档的建议,为\'storage\'目录及其子目录设置了写权限。\n会话(Session)的配置保持默认,没有进行任何修改。因此,会话驱动程序是\'file\',路径是\'framework/sessions\'。\n我写了以下测试路由:\n

Route::get('/', function () {
    session(["test" => "ok"]);
    return view('welcome');
});
Route::get('/2', function () {
    print "session = ".session('test');exit();
});

\n难道这样还不足以让会话正常工作吗?\nsession(\'test\')的值为null,并且在framework/sessions目录中没有写入任何文件。\n我已将framework/sessions文件夹的权限设置为777,但没有任何变化。\n我是一个Laravel的新手..也许我漏掉了什么?\n我需要在config/session.php中设置这些变量吗?\n

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

\n谢谢。

0
0 Comments

问题:为什么在 Laravel 5 中无法使用 Session?

原因:Session 类不是在 Laravel 5 中编写的。

解决方法:使用 Laravel 5 提供的 SessionFacade 类来访问和操作会话数据。

在 Laravel 5 中,有用户遇到了一个问题,就是无法使用 Session 类来访问和操作会话数据。下面给出了一个示例代码:

Route::get('/', function () {
    Session::put('test', 'ok');
    return view('welcome');
});
Route::get('/2', function () {
    print "session = ".Session::get('test');
    exit();
});

在上面的代码中,我们可以看到在第一个路由中,我们使用了 `Session::put('test', 'ok')` 来将一个键值对存储到会话中。然后,在第二个路由中,我们使用了 `Session::get('test')` 来获取存储在会话中的值。然而,这段代码在 Laravel 5 中并不起作用。

原因是,在 Laravel 5 中,Session 类不是由 Laravel 5 编写的。因此,我们不能直接使用 `Session::put()` 和 `Session::get()` 方法来访问和操作会话数据。

解决方法是使用 Laravel 5 提供的 SessionFacade 类来访问和操作会话数据。下面是修改后的代码:

use Illuminate\Support\Facades\Session;
Route::get('/', function () {
    Session::put('test', 'ok');
    return view('welcome');
});
Route::get('/2', function () {
    print "session = " . Session::get('test');
    exit();
});

在上面的代码中,我们首先引入了 `Illuminate\Support\Facades\Session` 命名空间,并使用 `Session` 类来访问和操作会话数据。这样,问题就解决了。

在 Laravel 5 中,由于 Session 类不是由 Laravel 5 编写的,我们不能直接使用 `Session::put()` 和 `Session::get()` 方法来访问和操作会话数据。解决方法是使用 Laravel 5 提供的 SessionFacade 类来访问和操作会话数据。

0
0 Comments

在Laravel 5中,如果你打开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');
   });
}

谢谢,这解决了我的问题。我阅读了整个文档,但我对这一步骤是否必要并不清楚。非常感谢你。

0