Ограничение размера сеанса Codeigniter - PullRequest
5 голосов
/ 23 июля 2011

При сохранении сеанса в базе данных через

$config['sess_use_database']    = TRUE;

Ограничен ли размер данных размером поля user_data, которое равно TEXT ...?Не 4 КБ, как обычное печенье.

Ответы [ 4 ]

4 голосов
/ 23 июля 2011

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

Если вы посмотрите на sess_write в классе Session, расположенном в ./system/libraries/, если вы включили использование базы данных, вы увидите, что она сериализует данные с использованием serialize и сохраняет это прямо в базу данных. Нет ограничений на длину, налагаемых CodeIgniter при сохранении в базе данных.

Для вашего удобства, вот ссылка на исходный код: https://bitbucket.org/ellislab/codeigniter/src/fe2247a927ab/system/libraries/Session.php#cl-252.

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

1 голос
/ 05 января 2015

Я обнаружил ту же проблему "ограничения размера", даже если у меня есть ci_session таблица для хранения

Я просто изменяю тип данных user_data = longtext, и моя проблема решается

хотя размер сеанса ограничен размером длинного текста NOT UNLIMITED

0 голосов
/ 26 февраля 2019

Документы CI указывают столбец данных BLOB для данных сеанса.

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(128) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        KEY `ci_sessions_timestamp` (`timestamp`)
);

В соответствии с MySQL Docs thisтип хранения требует L + 2 байта, где L <2 ^ 16 </em>.Это означает, что BLOB (и, следовательно, сериализованные данные в вашей таблице сеансов) ограничен 65 535 байтами .Обратите внимание, что этот предел применяется к длине данных сеанса после их сериализации , что может вызвать некоторую инфляцию относительно объема памяти, используемого в ОЗУ.

Вы, конечно, можетевыберите другой тип данных при определении таблицы сеанса.Например, MEDIUMBLOB вместо blob даст вам 16 МБ.Это может или не может привести к проблемам с производительностью.

0 голосов
/ 23 июля 2011

Полагаю, это ответит на ваш вопрос.из кода класса:

// Are we saving custom data to the DB?  If not, all we do is update the cookie
if ($this->sess_use_database === FALSE)
{
    $this->_set_cookie();
    return;
}

даже комментарии принадлежат самому классу.поэтому он обновляет cookie, если база данных не используется.

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