Каковы последствия хранения больших объемов данных в файле cookie сеанса? - PullRequest
6 голосов
/ 17 ноября 2011

Может ли кто-нибудь объяснить недостатки хранения больших объемов данных в течение сеанса или указать мне на чтение?

Мне также было бы интересно узнать, есть ли разница между хранением данных в сеансе и чтением данных из файлов данных?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2011

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

Сеансы в PHP по умолчаниюхранится в каталоге / tmp в виде плоского файла.Следовательно, данные вашего сеанса записываются в некоторый файл данных.

PHP позволяет вам переопределить обработчик сеанса по умолчанию с помощью функции session_set_save_handler(), где вы можете переопределить способ чтения / записи / обслуживания сеансов.

Вы также можете переопределить это через файл php.ini, где вы указываете его с помощью директивы session.save_handler.

Теперь, большое количество сеансов, хранящих большие данные, подразумевает, чтофайлов будет создан, и потребуется некоторое время, чтобы найти их из-за того, как работают жесткие диски (конечно, механические, которые до сих пор распространены).Чем больше у вас есть, тем больше времени нужно, чтобы найти его.Чем они больше, тем больше времени требуется, чтобы их прочитать.Если у вас их много, а они большие - вдвое больше проблем, необходимо изменить подход.

Так, каково решение?

Обычно, когда встречаютсяс падением производительности - люди загружают баланс своих сайтов.К сожалению, это не работает с сессиями, потому что балансировка нагрузки выбирает, какой компьютер использовать для обслуживания текущего запроса.Это означает, что разные компьютеры будут обслуживать страницы, которые вы просматриваете на каком-либо веб-сайте.Это означает, что если эти компьютеры используют механизм хранения сеансов по умолчанию (каталог / tmp), сеансы не будут сохраняться на серверах, поскольку они не могут получить доступ к каталогу / tmp друг друга.Вы можете решить эту проблему, установив NAS и сделав его глобально видимым для всех компьютеров в кластере, но это и дорого, и сложно в обслуживании.

Другой вариант - сохранить сеансы в базе данных.База данных доступна с любого из компьютеров в нашем вымышленном кластере.Обычно для обработки сессий используются специализированные базы данных, специализирующиеся на том, что они отделены от базы данных, хранящей контент вашего сайта или что-то еще.Во времена популярности NoSQL - на мой взгляд, NoSQL отлично подходит для обработки сессий.Они легко масштабируются, быстрее записывают данные на запоминающие устройства, чем RDBMS.

Третий вариант - улучшить все это, отказаться от использования жестких дисков в качестве постоянного хранилища и просто использовать память вашего сервера для хранения сеансов.То, что вы получаете, - это невероятная производительность, однако вся ваша оперативная память может быстро исчезнуть.Вы также можете создать кластер компьютеров, которые хранят сессии в своей оперативной памяти.Redis и Memcache отлично подходят для этой задачи, немного погуглив, вы получите хорошие ресурсы, объясняющие, как использовать Redis или Memcache для хранения сессий.

Суть всего этого: не храните слишком много данных вваши сеансы.В соответствии с вашими потребностями и бюджетом - есть 3 варианта хранения и работы с сессиями.

1 голос
/ 17 ноября 2011

Это хорошая ссылка: http://tuxradar.com/practicalphp/10/1/0

Сессионные данные также очень дороги.Лучший способ сделать это - сохранить cookie или session_id и использовать его для поиска того, что вам нужно, из dbfile / rdbms.Это также позволяет вашему сайту работать в многосерверной среде, где данные сеанса ограничены одним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...