我Laravel 5.2.10会议不会持续我Laravel 5.2.10会议不会持续(My Lara

2019-05-12 08:16发布

我有Laravel 5的全新安装,其实我已经试过这对多个版本,并不断撞击同样的问题。

我还没有从默认除了设置会话司机Redis的改变任何东西。 (也可根据文件具有相同的问题)。

我有两个途径设置如下

Route::get('/set/{value}', function($value) {
    var_dump(Session::getId());
    Session::set('test', $value);
    return view('welcome');
});

Route::get('/get', function() {
    return 'Get ' . Session::get('test');
});

如果我访问的URL /设置/ ABC我看到会话出现在Redis的(我也看到了使用基于文件时创建的文件)。 该会议的Redis看起来不错,如下图所示

127.0.0.1:6379> KEYS *
 1) "laravel:1a3ae6caff6346e4a173fdc1ab4c6eb0f138806b"
 2) "laravel:fed1af2fb44c6e625953237c3fa6fcbb05366a5c"
 3) "laravel:cb37286ccfe3e7caa20557aca840f50cb5a5f20d"

每次我虽然访问该页面,它将重新创建一个新的会话。

session.php文件文件的关键部分如下:

'lifetime' => 120,

'expire_on_close' => false,

我也曾在Redis的检查会话变量的TTL以及他们在120分钟(相当于秒)获得初始化。

任何想法,我做错了什么?

这可能是值得一提,我使用宅基地VM(完全的股票)来测试这一点。 我一直在使用多个浏览器也尝试过。 没有饼干是不断发送到浏览器,我相信一个会话ID应该作为初始GET请求的一部分被发送到浏览器?

Answer 1:

Laravel的中间件类\Illuminate\Session\Middleware\StartSession负责启动会话。 15.2之前,该跑的每一个请求,因为它是全球中间件堆栈的一部分。 现在,它是可选的,因为15.2希望能为目标的web UI和同一应用程序中的API。

如果你打开app/Http/Kernel.php ,你会看到StartSession中间件称为中间件组的一部分web 。 你需要把你所有的路线里面有你的示例工作。

Route::group(['middleware' => ['web']], function () {
    Route::get('/set/{value}', function($value) {
        var_dump(Session::getId());
        Session::set('test', $value);
        return view('welcome');
    });

    Route::get('/get', function() {
        return 'Get ' . Session::get('test');
    });
});

你可以看到, web中间件组还负责其他的事情一样提供$errors变量上的所有意见。

您可以在文档阅读更多关于它:

默认情况下, routes.php文件包含一个单一的路线,以及该应用的路由组web中间件组包含的所有路线。 这个中间件组提供会话状态和CSRF保护路线。

不放在内的任何路由web中间件组将无法访问会话和CSRF保护,所以请确保需要这些功能的路由被放置在组内。 通常情况下,你将会把最该组中的路线:

来源: https://laravel.com/docs/5.2/routing



文章来源: My Laravel 5.2.10 Sessions wont persist