CakePHP 403 по запросу AJAX - PullRequest
       15

CakePHP 403 по запросу AJAX

3 голосов
/ 01 апреля 2011

Я пытаюсь использовать AJAX для автоматического заполнения окна поиска на моем веб-сайте. Я использовал Firebug для тестирования моего приложения. Когда я пытаюсь что-то искать, Firebug сообщает, что запрос AJAX вернул ошибку, запрещенную 403. Однако когда я копирую EXACT URL, который был в AJAX-запросе, он возвращает правильные данные.

Edit: Я думаю, что это должно быть что-то на стороне JavaScript. Есть ли какие-либо заголовки, которые могут быть опущены при запросе AJAX по сравнению с обычным запросом?

Вот переменная $ _SERVER (я удалил параметры, которые были одинаковыми в обоих запросах) для запроса AJAX, который не удался (1) против ввода URL, и он работает (2):

(1)

2011-04-02 13:43:07 Debug: Array
(
    [HTTP_ACCEPT] => */*
    [HTTP_COOKIE] => CAKEPHP=0f9d8dc4cd49e5ca0f1a25dbd6635bac;
    [HTTP_X_REQUESTED_WITH] => XMLHttpRequest
    [REDIRECT_REDIRECT_UNIQUE_ID] => TZdgK654EmIAAEjknsMAAAFG
    [REDIRECT_UNIQUE_ID] => TZdgK654EmIAAEjknsMAAAFG
    [REMOTE_PORT] => 60252

    [UNIQUE_ID] => TZdgK654EmIAAEjknsMAAAFG
    [REQUEST_TIME] => 1301766187
)

(2) * * 1 010

2011-04-02 13:44:02 Debug: Array
(
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_COOKIE] => CAKEPHP=d8b392a5c3ee8dd948cee656240fd5ea;
    [REDIRECT_REDIRECT_UNIQUE_ID] => TZdgYq54EmIAAF7zt6wAAAJJ
    [REDIRECT_UNIQUE_ID] => TZdgYq54EmIAAF7zt6wAAAJJ
    [REMOTE_PORT] => 60281

    [UNIQUE_ID] => TZdgYq54EmIAAF7zt6wAAAJJ
    [REQUEST_TIME] => 1301766242
)

Ответы [ 3 ]

4 голосов
/ 02 апреля 2011

Я думаю, что нашел решение.Я установил средний уровень безопасности, чтобы решить проблему.Я нашел эту строку в папке конфигурации.Имеет ли средний уровень безопасности какие-либо проблемы в работе?

/**
 * The level of CakePHP security. The session timeout time defined
 * in 'Session.timeout' is multiplied according to the settings here.
 * Valid values:
 *
 * 'high'   Session timeout in 'Session.timeout' x 10
 * 'medium' Session timeout in 'Session.timeout' x 100
 * 'low'    Session timeout in 'Session.timeout' x 300
 *
 * CakePHP session IDs are also regenerated between requests if
 * 'Security.level' is set to 'high'.
 */
    Configure::write('Security.level', 'medium');

Редактировать: Это определенно решение.Вот что произошло:

Когда уровень безопасности установлен на высоком уровне, новый идентификатор сеанса генерируется при каждом запросе.

Это означает, что когда я делал запросы AJAX, генерировался новый идентификатор сеанса.

Если вы остаетесь на той же странице, JavaScript делает запрос, который генерирует новый session_id и не записывает новый session_id.

Все последующие запросы Ajax используют старый идентификатор сессии, который объявлен недействительным и возвращает пустой сеанс.

3 голосов
/ 01 апреля 2011

Если вы используете Auth, вам необходимо убедиться, что вы вошли в систему, если контроллер / действие отсутствует в вашем списке $this->Auth->allow().

Убедитесь, что вы также установили для debug значение 0, возможно,вызвать у вас некоторые проблемы.

0 голосов
/ 06 июля 2016

Возможно, это подделка межсайтовых запросов.Он отвечает за все запросы аутентификации, кроме запросов GET.Посмотрите на это: http://book.cakephp.org/3.0/en/controllers/components/csrf.html

...