Класс сеанса CodeIgniter не работает в Chrome

Я создал систему входа в проект codeigniter, который отлично работает в Firefox, но не работает в Chrome, извлекает данные и устанавливает их для сеанса, но когда этот код перенаправляет управление на admin / dashboard, там мы снова проверяем данные сеанса. Если данные сеанса не существуют, тогда код перенаправит пользователя для повторного входа в систему............ Мой код указан ниже, и я не знаю, что не так с этим сеансом / файлами cookie в codeigniter.?

        $data = array(
             'user_id' => $user->id,
             'name' => $user->name,
             'user_type' => $user->type,
             'username' => $user->username,
             'is_logged_in' => true
        );

        $this->session->set_userdata($data);
        //echo "user ".$this->session->userdata("username"); exit;
        redirect("admin/dashboard", "location"); 

У меня много поиска, но никто не работает в этой ситуации, например, изменение "cookie_domain" в конфигурационном файле, но ничего не произошло....

12 ответов

Решение

Я также столкнулся с этой ситуацией и исправил ее, увеличив срок действия сессии до одного дня.

ОБНОВИТЬ

Почему это работает, продлевая срок действия сессии?


Эта проблема возникает из-за разницы между часовыми поясами пользователя и местоположения веб-сервера, например, я живу в Пакистане, который на 10 часов опережает часовой пояс США, а мой сервер находится в США. Я запрашиваю страницу в 17/10/2012 14:00 по пакистанскому времени. Время в США 17/10/2012 4:00, поскольку веб-сервер находится в США, а срок действия сеанса установлен равным 2 часам. Срок действия файла cookie, отправленного сервером, истекает 17/10/2012 в 6:00. Теперь браузер взаимодействует с вашим локальным временем компьютера и получает время 17/10/2012 14:00, поэтому он удаляет cookie-файл или ваш файл cookie всегда обновляется по вашему запросу. Поэтому лучше всего установить срок окончания сеанса до 1 дня, потому что наибольшая разница часовых поясов составляет 17 часов между Новой Зеландией и США (я не уверен, что разница может быть, я ошибаюсь). Таким образом, ваше печенье будет хотя бы в течение 7 часов

Просто чтобы добавить свой опыт, я использую Codeigniter 2.1.4,

Проблема: сеансы в Chrome длились не более пары минут или не выполнялись при выполнении запросов ajax. Я попробовал несколько подходов: (изменил имя sess_cookie_name, больше время sess_expiration).

Я только что обнаружил, что установка sess_encrypt_cookie в FALSE устранила проблему выхода из Chrome.

$config['sess_encrypt_cookie'] = FALSE;

Не знаю почему, может быть, проблема длины cookie в chrome (насколько я знаю, шифрование сильно увеличивает длину строки).

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

Надеюсь, поможет!

Я изменил параметр sess_match_useragent на false в файле config.php

$config['sess_match_useragent'] = FALSE;

И проблема с Google Chrome была решена.

У меня была такая же проблема, и я мог решить ее, изменив значение $config['sess_time_to_update'] = 3; в /application/config/config.php фреймворка CodeIgniter.

Проверьте версию php вашего сервера, если его 7.x изменить на 5.6, он работает для меня

Я знаю, что это поздний ответ, но если вы ищете хорошее решение, вот оно: используйте этот код в качестве кода выхода из системы:

$this->session->sess_destroy();

Это обеспечит удаление сеанса "ci_session", что является основной причиной, по которой вы не можете сохранить новый сеанс, надеюсь, это поможет

Я столкнулся с той же проблемой и, наконец, смог ее решить, обновив таблицу базы данных сессий структурой sql из последней на данный момент версии Codeigniter, версии 2.1.4.

    CREATE TABLE IF NOT EXISTS  `ci_sessions` (
         session_id varchar(40) DEFAULT '0' NOT NULL,
         ip_address varchar(45) DEFAULT '0' NOT NULL,
         user_agent varchar(120) NOT NULL,
         last_activity int(10) unsigned DEFAULT 0 NOT NULL,
         user_data text NOT NULL,
         PRIMARY KEY (session_id),
         KEY `last_activity_idx` (`last_activity`)
    );

Также обратите внимание, что если у вас настроено несколько баз данных в config / database.php, таблица сеансов использует таблицу сеансов базы данных конфигурации по умолчанию.

Идеальный ответ Code Prank меня была та же проблема, и я решил ее, изменив

$config['sess_expiration'] = 8600;

секунды за 24 часа, секунды за 2 часа

$config['sess_expiration'] = 7200;

Я живу в Пакистане и использую сервер США, так что эта проблема всплывает.

Спасибо, Шаян, это была отличная помощь.

Я тоже столкнулся с такой же проблемой. Но я исправил это, установив правильное значение в $ config ['cookie_path']. Если ваш проект запускается из подпапки вашего домена. затем установите имя подпапки как значение $ config ['cookie_path'];

Предположим, URL вашего проекта: https://example.com/demo1/, тогда $ config ['cookie_path'] должен иметь вид $ config ['cookie_path'] = '/ demo1 /'

попробуйте обновиться до последней версии. Я использую версию 3.1.9 без проблем с сессией.

https://codeigniter.com/userguide3/installation/downloads.html

Проверяли ли вы, что вы храните сеанс в течение более длительного времени, и он не уничтожается раньше? Или, возможно, это связано с настройками chrome для приема данных сеанса и файлов cookie, поскольку в codeigniter нет такого кода, который будет работать в Firefox, и он не будет работать на chrome. Также убедитесь, что вы автоматически загружаете свою библиотеку 'session'.

Решено, у CodeIgniter есть некоторая проблема, если указанный домен для файлов cookie является localhost, я установил поддельный домен с реальной структурой имени домена в файл hosts, и он работает.

Другие вопросы по тегам