Я не могу добиться какого-либо прогресса с этим. Мои настройки сеанса CI таковы:
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 7200;
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = FALSE;
Библиотека сеансов загружается при автозагрузке. Я прокомментировал функцию sess_update, чтобы предотвратить ошибку AJAX, обнаруженную при чтении форума CI.
Таблица ci_sessions
в базе данных имеет параметры сортировки utf8_general_ci
(была ошибка, которая теряла сеанс после каждого вызова redirect()
, и это было связано с тем фактом, что параметры сортировки были latin1_swedish_ci
по умолчанию).
Он всегда прерывается после того, как пользователь из моего раздела администратора пытается добавить длинную статью и нажимает кнопку сохранения. Действие сохранения выглядит так:
function save($id = 0){
if($this->my_model->save_article($id)){
$this->session->set_flashdata('message', 'success!');
redirect('admin/article_listing');
}else{
$this->session->set_flashdata('message', 'errors encountered');
redirect('admin/article_add');
}
}
Если вы потратите более 20 минут и нажмете «Сохранить», статья будет добавлена, но при перенаправлении пользователь выйдет из системы.
Я также включил ведение журнала, и иногда, когда возникает ошибка, я получаю сообщение The session cookie data did not match what was expected. This could be a possible hacking attempt.
, но только половину времени. В другой половине я ничего не получаю: отображается сообщение, которое я поместил в конце конструктора Session, и больше ничего. Во всех случаях, если я смотрю на куки, хранящиеся в моем браузере, после ошибки первая часть куки не совпадает с хешем.
Кроме того, хотя я знаю, что Codeigniter не использует собственные сеансы, я установил session.gc_maxlifetime
на 86400.
Еще одна вещь, которую стоит упомянуть, - я не могу воспроизвести ошибку на своем компьютере, но на всех других компьютерах, которые я тестировал, эта ошибка появляется по той же схеме, что и упомянутая выше.
Если у вас есть идеи о том, что делать дальше, я буду очень признателен за них. Переход на новую версию или использование собственного класса сеанса (старый был для CI 1.7, он все еще будет работать?) - также варианты, которые я готов рассмотреть.
Редактировать : Я провел различие между классом Session в CI 2.0.3 и последним классом CI Session, и они одинаковые.