сеанс codeigniter часто заканчивается - PullRequest
6 голосов
/ 28 июля 2011

Я использую codeigniter для своего приложения

, что моя проблема в том, что сессия истекает, хотя пользователь активен на сайте.

Это настройки сеанса .. Я используюСессия БД

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'edu_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

любое решение для этого.

помогите мне, я должен это исправить

вот кодовый указатель ссылка на форум

Ответы [ 5 ]

12 голосов
/ 16 ноября 2011

У меня были проблемы с произвольно заканчивающимися сеансами CI.У вас есть AJAX или динамические ресурсы, загружающие библиотеку сессий?Если это так, представьте себе такой сценарий:

Я отправляю запрос ajax (который передается в моем идентификаторе сеанса CI с cookie), и он возвращает результаты, НО я также отправляю какой-то другой запрос (загружаю динамическийизображение, другой запрос AJAX и т. д.), который следует сразу же за первым запросом.Первый запрос может вызвать 300-секундное событие «пришло время обновить» и передать новый cookie, но дополнительный запрос отправляет старый идентификатор сеанса, верно?

Итак, CodeIgniter говорит: «Привет,Вы не можете сделать это "и создает новый сеанс, лишив доступа к обоим файлам cookie, которые мой браузер теперь не знает, что делать.

Вот ссылка на форум, которую я недавно опубликовал, которая более подробно рассматривается: http://codeigniter.com/forums/viewthread/172415/

3 голосов
/ 21 августа 2012

Как уже упоминалось в первом ответе, в библиотеке сеансов есть условие состязания, которое с тех пор несколько смягчено в последних версиях CodeIgniter, включая ветвь «разработки».Это реализует проверку isAjax на ротацию сеанса, но на самом деле не решает основную проблему.

2 голосов
/ 14 октября 2013

Я добавлю обходной путь для этой проблемы.если сделан вызов ajax, не обновляйте сеанс, расширьте класс сеанса, добавив этот файл в папку библиотеки:

    class MY_Session extends CI_Session {

    // --------------------------------------------------------------------

    /**
     * sess_update()
     *
     * @access    public
     * @return    void
     */
    public function sess_update()
    {
        $CI =& get_instance();

        if ( ! $CI->input->is_ajax_request())
        {
            parent::sess_update();
        }
    }

}
2 голосов
/ 23 июня 2013

вы уверены, что сеанс уничтожен?Я думаю, что он просто не обновляется, как предполагается, и создает новый при каждом запросе страницы.(общая проблема с настройками Codeigniter)

вот мои предложения:

дважды проверьте файл Application / Config / config.php, чтобы убедиться, что часть домена сеанса выглядит такесли вы размещаете сайт в главном каталоге:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "yourdomain.com";
$config['cookie_path']  = "var/sessions/";
$config['cookie_secure']    = FALSE;

и тому подобное, если вы размещаете сайт в подкаталоге:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "yourdomain.com";
$config['cookie_path']  = "siteSubDirectory/var/sessions/";
$config['cookie_secure']    = FALSE;

, а также убедитесь, что 2 каталогадоступны для записи, установив их разрешения на 755 или около того, и я настоятельно рекомендую вам включить сеанс базы данных, это более безопасно и поможет вам выяснить реальную проблему, проверив таблицу сеансов.удачи :) 1013

1 голос
/ 22 июля 2014

Просто измените кодирование таблицы ci_sessions на MyISAM: ALTER TABLE ci_sessions ENGINE = MyISAM;

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