Если вы храните большой объем данных в течение сеанса, у вас будет падение производительности ввода / вывода, так как будет много чтения / записи.
Сеансы в PHP по умолчаниюхранится в каталоге / tmp в виде плоского файла.Следовательно, данные вашего сеанса записываются в некоторый файл данных.
PHP позволяет вам переопределить обработчик сеанса по умолчанию с помощью функции session_set_save_handler()
, где вы можете переопределить способ чтения / записи / обслуживания сеансов.
Вы также можете переопределить это через файл php.ini, где вы указываете его с помощью директивы session.save_handler
.
Теперь, большое количество сеансов, хранящих большие данные, подразумевает, чтофайлов будет создан, и потребуется некоторое время, чтобы найти их из-за того, как работают жесткие диски (конечно, механические, которые до сих пор распространены).Чем больше у вас есть, тем больше времени нужно, чтобы найти его.Чем они больше, тем больше времени требуется, чтобы их прочитать.Если у вас их много, а они большие - вдвое больше проблем, необходимо изменить подход.
Так, каково решение?
Обычно, когда встречаютсяс падением производительности - люди загружают баланс своих сайтов.К сожалению, это не работает с сессиями, потому что балансировка нагрузки выбирает, какой компьютер использовать для обслуживания текущего запроса.Это означает, что разные компьютеры будут обслуживать страницы, которые вы просматриваете на каком-либо веб-сайте.Это означает, что если эти компьютеры используют механизм хранения сеансов по умолчанию (каталог / tmp), сеансы не будут сохраняться на серверах, поскольку они не могут получить доступ к каталогу / tmp друг друга.Вы можете решить эту проблему, установив NAS и сделав его глобально видимым для всех компьютеров в кластере, но это и дорого, и сложно в обслуживании.
Другой вариант - сохранить сеансы в базе данных.База данных доступна с любого из компьютеров в нашем вымышленном кластере.Обычно для обработки сессий используются специализированные базы данных, специализирующиеся на том, что они отделены от базы данных, хранящей контент вашего сайта или что-то еще.Во времена популярности NoSQL - на мой взгляд, NoSQL отлично подходит для обработки сессий.Они легко масштабируются, быстрее записывают данные на запоминающие устройства, чем RDBMS.
Третий вариант - улучшить все это, отказаться от использования жестких дисков в качестве постоянного хранилища и просто использовать память вашего сервера для хранения сеансов.То, что вы получаете, - это невероятная производительность, однако вся ваша оперативная память может быстро исчезнуть.Вы также можете создать кластер компьютеров, которые хранят сессии в своей оперативной памяти.Redis и Memcache отлично подходят для этой задачи, немного погуглив, вы получите хорошие ресурсы, объясняющие, как использовать Redis или Memcache для хранения сессий.
Суть всего этого: не храните слишком много данных вваши сеансы.В соответствии с вашими потребностями и бюджетом - есть 3 варианта хранения и работы с сессиями.