2016-08-31 5 views
0

У меня есть приложение на основе CakePHP версии 3.2.10. Я совершенно новый в CakePHP, так что извините, если это банальная проблема. В моем приложении я использую CSRF компонент и компонент Auth настроен таким образом:CakePHP не устанавливает cookie и сеанс после смены сервера

$this->loadComponent('Auth', [ 
      'authorize'=> 'Controller', 
      'authenticate' => [ 
        'Form' => [ 
          'fields' => [ 
            'username' => 'email', 
            'password' => 'password' 
          ], 
          'scope' => [ 
            'Users.active' => 1, 
          ] 
        ] 
      ], 
      'loginAction' => [ 
        'controller' => 'Users', 
        'action' => 'login' 
      ], 
      'logoutAction' => [ 
        'controller' => 'Users', 
        'action' => 'logout' 
      ], 
      'logoutRedirect' => [ 
        'controller' => 'Pages', 
        'action' => 'index' 
      ], 
      'unauthorizedRedirect' => '/', // $this->referer() 
    ]); 

и Войти действие, как

public function login() 
{ 
    $this->set('title', 'Logowanie'); 
    $this->set('bodyclass', 'main-page'); 

    if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      if($user['blocked'] == 0) { 
       $this->Auth->setUser($user); 
       if ($this->Auth->user('role') == 'admin') 
        return $this->redirect(['controller' => 'Admin', 'action' => 'index']); 
       return $this->redirect($this->Auth->redirectUrl()); 
      } 
      else{ 
       $this->Flash->error('Konto zostało zablokowane przez administratora serwisu. Skontaktuj się z Biurem Obsługi.'); 
      } 
     } else $this->Flash->error('Błędne dane logowania. Spróbuj ponownie.'); 
    } 
} 

Теперь проблема:

Несколько дней назад я изменил сервер, где приложение и после его изменения вход в систему перестает работать. После нажатия кнопки login появляется сообщение CSRF Token cookie. Чтобы проверить, является ли компонент проблемой, я отключил csrf и повторю попытку, затем появляется белый экран, и ничего не происходит, если я обновляю страницу, на которой я не зарегистрирован. Я проверил рабочую версию и нерабочую версию и понял, что Cake не хранит файлы cookie на новый сервер, а на старых - все в порядке, а файлы cookie установлены.

После нескольких исследований я узнал, что не только файлы cookie не работают, но и все сеансы. Я пытаюсь сбросить $ _SEESION, но он показывает что-то только после вызова $ this-> Auth-> setUser ($ user) и нигде больше. Поэтому я смотрю через какое-то решение и считаю, что есть установка в конфигурации/app.php для настройки сеанса:

'Session' => [ 
    'defaults' => 'php', 
], 

И прочитал, что когда установлено таким образом сеанс хранятся в PHP по умолчанию директории. Поэтому я изменил его на торт (даже сделав сеансы dir в папке tmp и добавив 777 разрешений). Но проблема не была решена. Я понятия не имею, почему он не работает. Я попытался установить cookiePath и другие настройки i Session config, но он все еще не работает.

Я думаю, что это может быть проблема сервера (разрешения). Так мало слов о серверах: старый сервер, на котором все работает, был моим личным сервером (у меня есть полный доступ), новый сервер (или, возможно, виртуальный сервер/хост) находится на одной из хостинговых компаний (home.pl), где у меня почти нет привилегий для настройки.

ответ

0

Убедитесь, что вы выполните следующие действия:

//For Set 
var $var = array('Cookie'); 

//For Write 
$this->Cookie->write('YOUR DESIRED NAME', cookieData, $expires = null); 

//For Read 
$this->Cookie->read('YOUR DESIRED NAME'); 
+0

Я не храним куки сам, поэтому не нужны эти шаги. Для входа в систему я использую систему авторизации cakephp по умолчанию. И любые cookie-файлы не установлены из cakePHP. – Manveru

+0

Так что вам лучше показать нам какой-то код, чтобы мы могли разрешить ваши выпущенные. – Noman

+0

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

0

Проверьте в вашем коде Conroller должны быть в src/Controller/AppController.php для ниже Очки

1) вы загружены печенье компонент надлежащим образом в initialize() или beforeFilter() метода?

2) Вы настроили домен и путь в своей конфигурации cookie с помощью $this->Cookie->configKey(), если да, то измените домен на новый домен или удалите конфигурацию домена.

3) удалить папки кэша для модели и упорства из TMP папки

Для получения дополнительной информации о Cookie см Document

+0

У меня нет дополнительной настройки для этого в моем AppController. Нужно ли инициализировать этот компонент, чтобы выполнить вход в систему. Как я уже сказал, он отлично работает на другом сервере без этой конфигурации. – Manveru

+0

Другие серверные средства с другим доменом? –

+0

Вы удалили кеш для моделей и стойкости и другого файла кеша в папке tmp? –

Смежные вопросы