Похоже, что вы не храните данные сеанса нигде, кроме файла cookie пользователя, так как кажется, что ваша конфигурация читает
$config['sess_save_path'] = NULL;
Поскольку вы используете драйвер files
, вы должны указать местоположение для данных сеанса, которые будут храниться на сервере. По умолчанию (из коробки) CodeIgniter настроен так:
$config['sess_save_path'] = APPPATH . 'ci_session/';
вам нужно указать каталог, в который CodeIgniter может писать. В противном случае, если данные сеанса не сохраняются на сервере, всякий раз, когда вы пытаетесь что-либо сделать, сеанс в файле cookie не будет сопоставляться ни с чем.
Помните, что сеансы CI - это не то же самое, что сеансы PHP.
Кроме того, поскольку сам CI утверждает в конфигурации:
| 'sess_save_path'
|
| The location to save sessions to, driver dependent.
|
| For the 'files' driver, it's a path to a writable directory.
| WARNING: Only absolute paths are supported!
|
| For the 'database' driver, it's a table name.
| Please read up the manual for the format with other session drivers.
|
| IMPORTANT: You are REQUIRED to set a valid save path!
ОБНОВЛЕНИЕ (31 августа 2018 г.) На основе обновлений, которые вы внесли в исходный вопрос:
В конфигурации сеанса есть несколько ненужных / избыточных настроек при использовании базы данных. Это все, что вам нужно, все, что нужно для настройки, должно исчезнуть:
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Я не думаю, что это так, но, пожалуйста, проверьте ваш код для любого места, где вы можете вызывать встроенную функцию session_start()
. Это приводит к тому, что управление сеансами CI ведет себя непредсказуемо, и один из симптомов состоит в том, что сеансы не сохраняются (я усвоил этот трудный путь, потратил около месяца на отладку, пока не обнаружил единственный вызов session_start, который все испортил)
Не могли бы вы проверить, действительно ли пишется столбец data
в таблице сеансов? (еще один симптом вышеупомянутого). Попробуйте запустить это, и если все возвращается как «пустое», мы можем приблизиться:
select
case
when cast(data as char(1000)) = '' then "empty"
else "something"
end as content, count(*)
from ci_sessions group by content;
Кроме того, имейте в виду, что создания таблицы сессий на самом деле недостаточно. Вы запускали ALTER
, что требуется в зависимости от настроек sess_match_ip
?