Класс сеанса 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, и он работает.