我很难在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在视图中处理下一个请求。
示例:
使用此行后,这是一个POST:
$errors
在说明字段中。准确地说是1024字节。
相反,如果我只是用一些虚拟数据填充该字段,但没有太疯狂:
如果我将会话驱动程序更改为file:
......它有效。
但这并不能解决我的问题。我确实需要使用cookie驱动程序进行会话,因为生产网站在3个不同的数据中心运行,以实现高可用性。使用cookie进行会话允许用户点击3个服务器中的任何一个,并且仍然可以继续使用它,而无需使用任何粘性会话或任何中央会话驱动程序。
使用数据库作为驱动程序 - 也在具有HA的群集中 - 不是一个选项,因为这是一个非常高流量的网站,而且每个请求都会写 听起来很吸引人。我想不惜一切代价阻止它。
无论如何这可以解决吗?
我必须说这是网站的后台,但很快前端的用户也可以在textarea中写入超过1024个字符...所以如果我只是更改后台的驱动程序并不是#39 ; t help,因为我们将为用户遇到同样的问题。
答案 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,
],
],