Перейти к содержанию

Плавающая ошибка в переменной $this->session->data при ajax запросе.


Перейти к решению Решений DKV666,

Рекомендуемые сообщения

Проблема возникает при ajax запросе. К примеру страница register.php function index() генерирует значение register_token:

 

$this->session->data['register_token'] = substr(bin2hex(openssl_random_pseudo_bytes(26)), 0, 26);

 

Юсер вводид данные и тыкает кнопку. Летит ajax запрос register.php register() передавая register_token в GET.

register() ловит в GET register_token, вынимает из сессии $this->session->data['register_token'] и сравнивает его с тем что получено в GET, то есть $this->request->get['register_token'].

Собственно тут-то и возникает ошибка. То что мы получили в GET и то что лежит в переменной сессии разное.

При этом если на index() сразу после сохранеия $this->session->data['register_token'] её же считать значение правильное, но при ajax $this->session->data['register_token'] другой. При чём в переменной висит значение предыдущего исполнения. То есть заходим на страницу $this->session->data['register_token'] = xxx, обновляем страницу значение $this->session->data['register_token'] стало yyy, но при  ajax значение выдаёт xxx.

По сути каким то образом ajax получает предыдущее значение переменной. Временные задержки при ajax никаким образом ситуацию не меняют.

Ошибка рандомная. То есть один пользователь может вообще её не встретить хоть утыкайся, когда как другой будет ловить ошибку через раз при выполнении ajax. Без ajax ошибка не наблюдается вообще. Т.к. ajax запросы основа половины запросов на opencart вешать кастыли как-то не очень хочется.

OCSESSID при ajax запросе с ошибкой проверял, совпадает.

Собственно жду ваши мысли по этому поводу.

 

Ссылка на комментарий
Поделиться на другие сайты

В 27.08.2023 в 14:33, DKV666 сказал:

Ошибка рандомная. То есть один пользователь может вообще её не встретить хоть утыкайся, когда как другой будет ловить ошибку через раз при выполнении ajax.

 

потому что

В 27.08.2023 в 14:33, DKV666 сказал:

К примеру страница register.php function index() генерирует значение register_token:

 

$this->session->data['register_token'] = substr(bin2hex(openssl_random_pseudo_bytes(26)), 0, 26);

 

и при каждом обращении к register.php - значение $this->session->data['register_token'] будет пересоздаваться

 

как вариант, изначально используйте проверку при создании

типа if (empty($this->session->data['register_token']))

Ссылка на комментарий
Поделиться на другие сайты

В 27.08.2023 в 20:46, AlexDW сказал:

 

потому что

 

и при каждом обращении к register.php - значение $this->session->data['register_token'] будет пересоздаваться

 

как вариант, изначально используйте проверку при создании

типа if (empty($this->session->data['register_token']))

 

Вы немного не поняли сути проблемы. index() создаёт или перезаписывает $this->session->data['register_token'] исправно. То есть проверка на наличие и актуальность при index() ничего не даст, т.к. переменная переписывается и имеет нужные данные. А вот при выполнении ajax register.php эта же переменная или вовсе отсутствует, или имеет другое значение. Именно по этому предложенный вами способ не имеет смысла. Будь всё так просто я бы сюда не писал.

Ссылка на комментарий
Поделиться на другие сайты

В 28.08.2023 в 16:14, DKV666 сказал:

 

Вы немного не поняли сути проблемы. index() создаёт или перезаписывает $this->session->data['register_token'] исправно. То есть проверка на наличие и актуальность при index() ничего не даст, т.к. переменная переписывается и имеет нужные данные. А вот при выполнении ajax register.php эта же переменная или вовсе отсутствует, или имеет другое значение. Именно по этому предложенный вами способ не имеет смысла. Будь всё так просто я бы сюда не писал.

 

Потому что при обращении к index() register.php переменная перезаписывается, и ты видишь старое значение в get. Не перезыписывай переменную, или проверяй раньше.

Ссылка на комментарий
Поделиться на другие сайты

В 28.08.2023 в 15:05, mazein сказал:

 

Потому что при обращении к index() register.php переменная перезаписывается, и ты видишь старое значение в get. Не перезыписывай переменную, или проверяй раньше.

 

И это не верно. Я не к index() register.php обращаюсь, а посредством ajax к register() register.php. Пользователь открывает страницу рега вызывая index(),  index() создаёт или перезаписывает переменную в сессии, пользователь заполняет форму и отправляет её в функцию register() в которой считывается значение переменной в сессии. В index() переменная пишется и читается правильно, а в register() её или нет вообще, или она имеет значение предыдущего обновления страницы.

Ссылка на комментарий
Поделиться на другие сайты

В 28.08.2023 в 16:33, DKV666 сказал:

И это не верно. Я не к index() register.php обращаюсь, а посредством ajax к register() register.php. Пользователь открывает страницу рега вызывая index(),  index() создаёт или перезаписывает переменную в сессии, пользователь заполняет форму и отправляет её в функцию register() в которой считывается значение переменной в сессии. В index() переменная пишется и читается правильно, а в register() её или нет вообще, или она имеет значение предыдущего обновления страницы.

Вам всё правильно указали.

Страница может быть открыта на соседней вкладке. Или браузер может дёрнуть саму страницу.

Может какой-то плагин в браузере.

Токен для сессии достаточно один раз генерировать, чтобы потом не ловить вот такие приключения.

Ссылка на комментарий
Поделиться на другие сайты

  • Решение
В 29.08.2023 в 06:33, mpn2005 сказал:

Вам всё правильно указали.

Страница может быть открыта на соседней вкладке. Или браузер может дёрнуть саму страницу.

Может какой-то плагин в браузере.

Токен для сессии достаточно один раз генерировать, чтобы потом не ловить вот такие приключения.

 

Интересные вы ребята...

 

То есть по вашей логике если что-то дёргает повторно страницу переменная меняется на предыдущее значение вместо обновления на новое значение, или вовсе отсутствует. Ещё раз повторяю, переменная не меняется на новую, у неё не происходит изменения на новое значение, переменная равна предыдущему значению при предыдущем обновлении страницы, или полностью отсутствует именно при ajax запросе. Никакие две три страницы никто не открывает, каким образом браузер в вашей логике самостоятельно может дёргать страницу ели этого вообще нет в коде мне вообще не понятно.

 

Если бы всё было так как вы мне втираете переменная менялась бы на новое уникальное значение, а этого не происходит, вместо этого откуда-то подтягивается старое значение которого по логике там быть вообще не должно. А изредка значение вообще отсутствует. Как в вашей логике обновление страницы с чётко прописанным кодом заменить значение переменной может её полностью удалять я вообще понимать отказываюсь.

 

В общем я закрываю тему. От вас толку как от козла молока. Мне проще самому разобраться, чем тратить время в попытке заставить упрямых хотя бы раз вдумчиво прочитать то что я написал.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...