Случайное получение 302 при запросе Ajax с использованием Cakephp

У меня есть система, разработанная на cakephp. Там у меня есть страница профиля клиента, которая показывает мне различную информацию, такую ​​как заметки, телефонные звонки, прикрепленные файлы. Основная информация извлекается через Cakephp, другая информация, подобная приведенной выше, извлекается через запросы Ajax и отображается, как только данные получены. К сожалению, иногда и очень случайно (между каждым 10-м и 100-м запросами) я получаю 302 Ajax-запроса, выхожу из системы и перенаправляюсь на формуляр входа (который является основным путем перенаправления, если вы не вошли в систему).

Вы можете увидеть пример со страницы сети Google на картинках. На рисунке показано, что вызовы getPhonecalls, getNotes и getOutboxBook работают нормально, но вызов getFilesBackoffice возвращает 302, а затем запускает страницу входа. Также впоследствии getAllowedFiles называется нормально. Важно сказать, что это всегда другой вызов Ajax, и поэтому я предполагаю, что любой вызов Ajax может вызвать проблему. Успешный вызов Ajax возвращает JSON.

Случайное получение 302 при запросе Ajax с использованием Cakephp

Я попытался реконструировать проблему, но мне кажется, что задача реконструировать ее невыполнима. Я также попытался отладить эту проблему и попытался проверить, в чем может быть ошибка ... но безуспешно. Также журнал ошибок php не дает никакой информации. Итак, затем я загрузил полную «Сетевую информацию» из Chrome с помощью «сохранить как HAR с контентом». Глядя на этот файл, кажется, что Cookie (с его Сессией) удален.

Вот выдержка из HAR со статусом 302:

"response": {
      "status": 302,
      "statusText": "Found",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Date",
          "value": "Thu, 20 Dec 2018 09:47:27 GMT"
        },
        {
          "name": "Server",
          "value": "Apache/2.4.12 (Unix) OpenSSL/1.0.1p PHP/5.6.11 mod_perl/2.0.8-dev Perl/v5.16.3"
        },
        {
          "name": "X-Powered-By",
          "value": "PHP/5.6.11"
        },
        {
          "name": "Content-Type",
          "value": "text/html; charset=UTF-8"
        },
        {
          "name": "Location",
          "value": "http://localhost/stressfrei/HRMAppMig/Users/login"
        },
        {
          "name": "Connection",
          "value": "Keep-Alive"
        },
        {
          "name": "Set-Cookie",
          "value": "CAKEPHP=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/"
        },
        {
          "name": "Set-Cookie",
          "value": "CAKEPHP=2e5gke00430jdkd8ll5jl3ini3; expires=Fri, 21-Dec-2018 09:47:28 GMT; Max-Age=86400; path=/stressfrei/HRMAppMig/; HttpOnly"
        },
        {
          "name": "Set-Cookie",
          "value": "CAKEPHP=o3udvthe0rkmjt5djrjvnt3392; expires=Fri, 21-Dec-2018 09:47:28 GMT; Max-Age=86400; path=/stressfrei/HRMAppMig/; HttpOnly"
        },
        {
          "name": "Keep-Alive",
          "value": "timeout=5, max=95"
        },
        {
          "name": "Content-Length",
          "value": "0"
        }
      ],
      "cookies": [
        {
          "name": "CAKEPHP",
          "value": "deleted",
          "path": "/",
          "expires": "2018-12-20T09:47:27.127Z",
          "httpOnly": false,
          "secure": false
        },
        {
          "name": "CAKEPHP",
          "value": "2e5gke00430jdkd8ll5jl3ini3",
          "path": "/stressfrei/HRMAppMig/",
          "expires": "2018-12-21T09:47:27.127Z",
          "httpOnly": true,
          "secure": false
        },
        {
          "name": "CAKEPHP",
          "value": "o3udvthe0rkmjt5djrjvnt3392",
          "path": "/stressfrei/HRMAppMig/",
          "expires": "2018-12-21T09:47:27.127Z",
          "httpOnly": true,
          "secure": false
        }
      ],
      "content": {
        "size": 0,
        "mimeType": "text/html",
        "compression": 0
      },
      "redirectURL": "http://localhost/stressfrei/HRMAppMig/Users/login",
      "headersSize": 717,
      "bodySize": 0,
      "_transferSize": 717
    }

Вот отрывок из 200

"response": {
      "status": 200,
      "statusText": "OK",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Date",
          "value": "Thu, 20 Dec 2018 09:52:39 GMT"
        },
        {
          "name": "Server",
          "value": "Apache/2.4.12 (Unix) OpenSSL/1.0.1p PHP/5.6.11 mod_perl/2.0.8-dev Perl/v5.16.3"
        },
        {
          "name": "Connection",
          "value": "Keep-Alive"
        },
        {
          "name": "X-Powered-By",
          "value": "PHP/5.6.11"
        },
        {
          "name": "Content-Length",
          "value": "2239"
        },
        {
          "name": "Keep-Alive",
          "value": "timeout=5, max=97"
        },
        {
          "name": "Content-Type",
          "value": "text/html; charset=UTF-8"
        }
      ],
      "cookies": [],
      "content": {
        "size": 2239,
        "mimeType": "text/html",
        "compression": 0,
        "text": "HERE IS SOME JSON"
      },
      "redirectURL": "",
      "headersSize": 287,
      "bodySize": 2239,
      "_transferSize": 2526
    },

Вот пример моего вызова ajax.

this.ajaxCall = function(offset) {
  var class_prefixTemp = this.class_prefix;
  var self = this;
  $.ajax({
    //ajax options
    type: "POST",
    url: self.ajaxUrl,
    data: {"offset": offset, "elements_per_page": this.elements_per_page, "conditions": this.conditions, "recursive": this.recursive},
    dataType: 'json',

    //handling return
    success: function(result) {
     //print out the data from the result
    }
  });
}

Ты хоть представляешь, как мне узнать, в чем моя проблема, чтобы наконец ее решить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
441
1

Ответы 1

Наконец, проблема заключалась в настройке сеанса в core.php. В core.php CakePhp можно установить для сеанса autoRegenrate значение true. Это вызвало проблему, заключающуюся в том, что при загрузке новой страницы создается новый сеанс. Это может привести к тому, что длинные запросы Ajax работают с неправильным идентификатором сеанса, потому что он был обновлен, и поэтому идентификатор сеанса больше не подходит. Это привело к выходу из системы.

Наконец, мне пришлось отключить возобновление сеанса, установив для autoRegenerate значение false!

Другие вопросы по теме