У меня проблема с хранением большого массива в Laravel 5.6.

Вот моя проблема.

Я храню массив в сеансе Laravel.

session(['array_cache' => $array]);

Массив выглядит так:

array:59 [▼
  0 => array:18 [▼
    "id" => 2
    "type" => 3
    "partner_id" => 1
    "username" => "Pink11034519"
    "firstname" => "Jade"
    "lastname" => "Altenwerth"
    "age" => 18
    "gender" => "f"
    "email" => "[email protected]"
    "mobile" => "406-361-6252 x4876"
    "rank_id" => 3
    "status" => 1
    "avatar" => ""
    "timezone" => "America/Anguilla"
    "available" => "7:00-11:30 | 13:00-17:00"
    "created_at" => "2018-08-28 02:56:26"
    "updated_at" => "2018-09-12 21:03:50"
    "pivot" => array:3 [▼
      "employee_id" => 1
      "storable_id" => 2
      "storable_type" => "Employee"
    ]
  ]
  1 => array:18 [▶]
  2 => array:18 [▶]
  3 => array:18 [▶]
  ....
  57 => array:18 [▶]
  58 => array:18 [▶]
]

Когда я сохраняю массив, подобный приведенному выше, с более чем 55 элементами, сеанс прерывается, и я выхожу из системы.

Если я уменьшу объем данных в подмассивах, я смогу увеличить количество хранимых подмассивов, прежде чем сеанс снова прервется.

Так что, похоже, размер имеет значение.

Есть ли какие-либо ограничения на размер массива, хранящегося в сеансе Laravel?

Или, может быть, проблема связана с автоматической сериализацией Laravel?

Кто-нибудь сталкивался с подобным?

Я ценю некоторые мысли.


РЕДАКТИРОВАТЬ: Вот что произошло.

Как это бывает, сессия проекта хранится в БД.

Стандартная настройка таблицы сеансов Laravel для столбца «полезная нагрузка» — это TEXT, который содержит: 65 535 символов.

Laravel сериализует, а base64 кодирует полезную нагрузку сеанса. Это может быстро съесть разрешенные символы.

Решение о смене хранилища на файл не зависит от меня, поэтому я изменил TEXT на MEDUMTEXT, чтобы увеличить объем хранилища, хотя меня не слишком устраивает возможный размер хранимой строки. Напишу меморандум и внимательно посмотрю, как получится.


person Jeffz    schedule 24.04.2019    source источник
comment
Вы получите некоторые подробности из stackoverflow.com/a/217443/1578380.   -  person Chintan7027    schedule 24.04.2019
comment
Вам лучше использовать сеанс с умом. Вместо того, чтобы хранить все в сеансе, вы можете лениво загружать данные, если это требуется, из БД или чего-то еще. При необходимости используйте механизм кэширования для достижения скорости, если данные извлекаются наиболее часто.   -  person Rahul    schedule 24.04.2019
comment
Что у вас memory_limit в настройках PHP?   -  person Tarasovych    schedule 24.04.2019
comment
Чинтан – спасибо; Тарасович - лимит памяти: 2048M; Рахул: да, это для целей кеширования, стандартный кеш не подходит, так как данные кешируются на основе пользователя/сеанса, но я рассматриваю такой вариант. Я думаю, что подумываю поместить этот массив в какую-нибудь хорошо индексированную таблицу базы данных, чтобы обменять сложный (а значит, дорогой) запрос на простой.   -  person Jeffz    schedule 24.04.2019
comment
У меня нет ответа, но попробуйте изменить SESSION_DRIVER (файл, базу данных, массив...), чтобы увидеть, сохраняется ли проблема. Это может помочь вам определить источник проблемы.   -  person Clément Baconnier    schedule 24.04.2019
comment
@cbaconnier Спасибо, попробую.   -  person Jeffz    schedule 24.04.2019


Ответы (1)


В сеансе laravel нет ограничений, и вы получите больше информации о сеансе из здесь

person Mihir ajagia    schedule 24.04.2019
comment
Спасибо за уделенное время. Проблема в конкретном случае, когда сеанс Laravel прерывается с сохранением большего массива. - person Jeffz; 24.04.2019
comment
Вы проверили, что ваш файл ENV установлен с SESSION_DRIVER=file ? - person Mihir ajagia; 24.04.2019