Вход / перенаправление Cakephp не работает в IE10 на Bluehost

Запутанный вопрос, но я постараюсь подвести итог.

У меня есть настройка входа в систему с использованием компонента аутентификации Cakephp, который в зависимости от роли пользователя перенаправляет пользователя на соответствующую страницу. Кажется, он отлично работает в Chrome/FF/IE 10 в моей локальной настройке WAMP. Но, похоже, это не работает с IE после того, как я загрузил сайт на Bluehost.com.

Проблема заключается в том, что при входе на мой веб-сайт на bluehost через IE10 я продолжаю перенаправляться обратно на страницу входа после входа. Перенаправление работает в любом другом браузере. Как ни странно, это работает в IE10 в локальной среде разработки.

ИСПОЛЬЗОВАНИЕ CAKEPHP 2.4.5

Локальный разработчик: (перенаправление после входа в систему работает нормально во всех браузерах)

Wamp 2.4 Apache 2.4.4 PHP 5.4.12 MYSQL 5.6.12

Bluehost: (перенаправление после входа не работает в IE10, перенаправляет обратно на страницу входа!)

PHP 5.4 Апач???

Вот урезанная версия моего AppController, показывающая объявления Auth.

class AppController extends Controller {

    public $components = array(
        'DebugKit.Toolbar',
        'Session',
        'Auth'=>array(
            'loginAction'=>array('controller'=>'users', 'action'=>'login'),
            'logoutRedirect'=>array('controller'=>'users', 'action'=>'loggedout'), 
            'authError'=>'You cannot access that page', //Error message whenever someone access a page without auth
            'authorize'=>array('Controller') //Where in our application that authorization will occur
        )
    );

    ////Determines what logged in users have access to
    public function isAuthorized($user) {

        if($user['role'] == 'admin') {
            switch ($this->name) {
                case 'Home':
                    return true;
                    break;              
                case 'BillingCenters':     
                    return true;
                    break;
                case 'Merchants':     
                    return true;
                    break;
            }
        }
        if($user['role'] == 'merchant') {
            switch ($this->name) {
                case 'MCP':
                    return true;
                    break;
                case 'Users':
                    switch ($this->action){
                        case 'logout':
                            return true;
                    }
                    return false;

            }
        }

        die('isAuthorized in AppController denies access to this controller called: ' .  $this->name);
    }

    //Determines what non logged in users have access to
    public function beforeFilter() {
        //Logic placed here will run before the action is run
        parent::beforeFilter();
        $this->Auth->allow('loggedout', 'login');

    }
}

Вот код в моем UsersController, который относится к логину. Я удалил фрагмент кода поиска базы данных SQL, который заполняет роль пользователя в переменной сеанса, чтобы сделать его более читаемым. Важен конечный бит, который перенаправляет пользователя в зависимости от его роли.

public function login() {

    $this->layout = 'loginlogout';


    if ($this->request->is('post')) {
        if ($this->Auth->login()) {

            /* ---- removed chunk of code that determines Auth.User.role value for Session... for readability, -- */

            if ($this->Session->read('Auth.User.role') == 'admin') {
                $this->redirect(array('controller' => 'home', 'action' => 'index'));

            }
            if ($this->Session->read('Auth.User.role') == 'merchant') {
                $this->redirect(array('controller' => 'MCP', 'action' => 'snapshot'));

            }
            die('Unable to determine user role for redirection');

        } else {
            $this->Session->setFlash('Your username/password combination was incorrect');
        }
    }

}

И ниже я прикрепил скриншоты различных сетевых трассировок браузера после нажатия на кнопку входа. После входа в систему я ожидаю, что меня перенаправят на «MCP/Snapshot». Все скриншоты сделаны при входе на мой сайт на действующем сервере (Bluehost).

CHROME (работает перенаправление при входе и после входа!) введите здесь описание изображения

Firefox (работает перенаправление при входе и после входа!) введите здесь описание изображения

IE10 INTERNET EXPLORER 10 – ПОСЛЕ ВХОДА В ИНТЕРНЕТ НЕ РАБОТАЕТ ЗАГРУЗИТЬ СТРАНИЦУ/ДЕЙСТВИЕ SNAPSHOT MCP и снова возвращает пользователя на страницу входа!! введите здесь описание изображения

Кажется, это работает при входе в мою локальную среду разработки (скриншоты не предоставлены). Дайте мне понять, почему это не работает для IE10 на Bluehost? Я тоже не уверен, что понимаю коды возврата HTTP 302!


person aDvo    schedule 24.04.2014    source источник


Ответы (1)


В ходе некоторых тестов я понял, что, похоже, Internet Explorer / IE терял информацию о моем сеансе каждый раз, когда я менял страницу, будь то ручной ввод URL-адреса в адресную строку или перенаправление, вызванное командой перенаправления Cakephp .

Я обнаружил, что добавление session_start() в webroot/index.php загадочным образом помогает решить эту проблему. Я не уверен, как это объяснить, и я надеюсь, что это не создаст дополнительных ошибок просто потому, что я не полностью понимаю последствия вставки этой строки кода для cakephp.

https://stackoverflow.com/a/16720810/3189873

Я обнаружил, что другие решения, связанные с настройкой значений для агента пользователя и уровня безопасности в core.php, на самом деле не помогают, хотя их проблемы и симптомы кажутся похожими на мои.

http://derickng.com/posts/36-cakephp-losing-or-missing-session

Проблемы Cookie/Session CakePHP

person aDvo    schedule 24.04.2014