Ошибка входа в систему, сеанса и перенаправления кода в Internet Explorer? - PullRequest
6 голосов
/ 09 ноября 2009

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

Логин всегда работает, когда я использую Firefox. Вход в систему последовательно работает в некоторых браузерах IE7, но постоянно происходит сбой в других браузерах IE7.

При трассировке кода я вижу, что models / redux_auth_model.php успешно аутентифицирует пользователя, записывает информацию о пользователе в $ this-> session-> set_userdata () и перенаправляет их на страницу участника по моему выбору. , Вот код:

public function login($identity = false, $password = false)
{
            $identity_column = $this->config->item('identity');
            $users_table     = $this->tables['users'];

            if ($identity === false || $password === false || $this->identity_check($identity) == false)
            {
                return false;
            }

            $query = $this->db->select($identity_column.', email, password, group_id')
                           ->where($identity_column, $identity)
                           ->where('active', 'Active')
                           ->limit(1)
                           ->get($users_table);

        $result = $query->row();

        if ($query->num_rows() == 1)
        {
            //$password = $this->hash_password_db($identity, $password);

           if (!empty($result->activation_code)) { return false; }

                if ($result->password === $password)
                {
                    $this->session->set_userdata($identity_column,  $result->{$identity_column});
                    $this->session->set_userdata('email',  $result->email);
                    $this->session->set_userdata('group',  $result->group_id);
                    return true;
                }
        }

        return false;
}

Я выполнил дамп переменной $ this-> session в IE7 и FF и подтвердил, что все данные пользователя сохранены до перенаправления. Сессия содержала мою электронную почту, информацию о группе и информацию о $ identity_column.

Однако после перенаправления данные сеанса пусты в некоторых браузерах IE7, поэтому CI продолжает загружать меня из системы. Он полностью исправен в других браузерах IE7 и всегда исправен в Firefox.

Почему данные сеанса зависят от браузера?

Любые идеи о том, как устранить эту проблему дальше? Я сбит с толку ...

Ответы [ 12 ]

7 голосов
/ 10 ноября 2009

Это неприятная проблема с классом сеансов базы данных Codeigniter, в конце концов я прибег к использованию собственных сеансов с использованием замены, найденной здесь: https://github.com/EllisLab/CodeIgniter/wiki/Native-session

6 голосов
/ 20 сентября 2012

У меня была такая же проблема при использовании CI Session в IE. Затем я использую приведенный ниже заголовок в конструкторе контроллера, и он работает для меня.

Вот заголовок:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

4 голосов
/ 17 мая 2011

Я столкнулся с той же проблемой при использовании IE8 в режиме браузера. Я обнаружил, что проблема заключается в сопоставлении пользовательского агента. В базе данных сеанса он сохраняет useragent как IE7, но из cookie получает IE8. Я установил $config[sess_match_useragent] = FALSE и проблема решена.

3 голосов
/ 10 ноября 2009

Класс сессии отлично работает в нескольких моих проектах, включая поддержку IE6 / 7/8 (включая несколько выпусков CI). Есть несколько причин, которые могут вызывать это, за пределами кода, вставленного выше:

  1. Вызов $this->session->sess_create(); из базового класса (или в другом месте кода вашего класса) приведет к сбросу сеанса.
  2. Попробуйте объединить ваши set_userdata вызовы с одним вызовом, передав ему массив.
  3. Убедитесь, что в ваших данных нет неожиданных символов (это может вызвать проблемы в некоторых браузерах).
  4. Убедитесь, что настройки вашего класса сеанса в конфигурации не переворачиваются на cookie каждый запрос.

В качестве альтернативы рассмотрим альтернативный класс сеанса, такой как Собственные сеансы

2 голосов
/ 17 августа 2012

Когда мы столкнулись с этой проблемой, мы разрабатывали приложение с вкладкой Facebook. Мы пробовали вышеупомянутое безрезультатно. Вот что мы узнали:

  1. Настройки конфиденциальности IE должны быть средними или меньшими
  2. Если вы запускаете приложение страницы, убедитесь, что ОБА URL-адресов содержат протокол HTTPS

Кроме того, ознакомьтесь с Компактной политикой конфиденциальности для файлов cookie.

2 голосов
/ 02 января 2011

Это проблема с браузерами. Я положил это в MY_Controller в конструкторе:

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");

например:

if($this->uri->segment(1)=='admin') header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
2 голосов
/ 10 ноября 2009

Это проблема, для которой кто-то сделал исправление стороннего производителя, оно исправляет контроллер сеанса. Позволь мне откопать это. Я использовал его в моих настройках codeigniter с тех пор, как это было впервые отмечено.

Эта проблема связана с IE7 / IE8 с перенаправлениями или фреймами.

EDIT

Вот ссылка, которую я нашел раньше, она помогла мне с проблемой IE. Надеюсь, это то, что вызывает у вас головные боли: http://www.philsbury.co.uk/blog/code-igniter-sessions

1 голос
/ 19 апреля 2012

Я решил эту проблему, используя собственный php-сеанс вместо cookie-файлов (Сохранение codeigniter session_id в нативном php-сеансе).

Вы можете получить библиотеку здесь: https://github.com/staskus/codeigniter-2.--native-session.

Просто скопируйте файл MY_Session.php в приложения / библиотеки

1 голос
/ 10 марта 2012

файл конфигурации приложения config.php

// 'cookie_secure' =  Cookies will only be set if a secure HTTPS connection exists. 
$config['cookie_secure']    = FALSE;
0 голосов
/ 28 февраля 2016

Эта проблема мучила меня, когда я пытался заставить страницу входа работать в CodeIgnitor. Сессия не сохранит.

Оказывается, это было из-за имени домена, которое я создал из FREEDNS, которое содержало подчеркивание (_). Я переименовал доменное имя, используя точку (.), и отменил все изменения кода, предложенные в этом посте, и вуаля, это сработало.

Спасибо за все комментарии и комментарии на этой странице, потому что они действительно привели меня к дальнейшему расследованию этого проклятого подчеркивания.

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