Cookie会话驱动程序无法保存任何验证错误或Flash数据

时间:2017-10-16 03:20:24

标签: php laravel session cookies

我很难在Laravel中使用cookie会话驱动程序。

我有一个简单的表格,并且有一个验证。这是我保存此表单数据的方法:

public function store()
{
    $this->validate(request(), [
        'name'        => 'required',
        'title'       => 'required',
        'description' => 'required|max:600',
        'image'       => 'required|file|mimes:jpeg,png',
    ]);

    $member = TeamMember::create(request()->all());
    $member->addImage(request()->file('image'));

    return redirect()->route('backoffice.team-members');
}

非常简单。

问题是,当使用cookie会话驱动程序时,如果我保存此表单的描述长度为1024个字符,我将被重定向回来,但没有闪存数据且没有{{1在视图中处理下一个请求。

示例:

enter image description here

使用此行后,这是一个POST:

$errors

在说明字段中。准确地说是1024字节。

相反,如果我只是用一些虚拟数据填充该字段,但没有太疯狂:

enter image description here

如果我将会话驱动程序更改为file:

enter image description here

......它有效。

但这并不能解决我的问题。我确实需要使用cookie驱动程序进行会话,因为生产网站在3个不同的数据中心运行,以实现高可用性。使用cookie进行会话允许用户点击3个服务器中的任何一个,并且仍然可以继续使用它,而无需使用任何粘性会话或任何中央会话驱动程序。

使用数据库作为驱动程序 - 也在具有HA的群集中 - 不是一个选项,因为这是一个非常高流量的网站,而且每个请求都会写 听起来很吸引人。我想不惜一切代价阻止它。

无论如何这可以解决吗?

我必须说这是网站的后台,但很快前端的用户也可以在textarea中写入超过1024个字符...所以如果我只是更改后台的驱动程序并不是#39 ; t help,因为我们将为用户遇到同样的问题。

1 个答案:

答案 0 :(得分:7)

浏览器有cookie限制。当您使用cookie作为会话驱动程序时,浏览器存储cookie太大了。您可以在此处查看浏览器Cookie限制http://browsercookielimits.squawky.net/

<强>建议
使用redis作为会话驱动程序。

<强>步骤
 1.安装Redis服务器后,添加predis/predis包:

composer require predis/predis

2.更改配置文件config/database.php

'redis' => [

    'client' => 'predis',

    'default' => [
        'host' => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

],