Получение случайным образом 302 по запросу Ajax с использованием CakeStack Overflow

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

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

введите описание изображения здесь

Я пытался воссоздать проблему, но для меня кажется, что ее невозможно восстановить. Я также попытался отладить эту проблему и попытался проверить, в чем может быть ошибка … но без шансов. Также журнал ошибок 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
}
});
}

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

0

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector