DKV666 Posted August 27, 2023 at 09:33 AM Share Posted August 27, 2023 at 09:33 AM Проблема возникает при 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 запросе с ошибкой проверял, совпадает. Собственно жду ваши мысли по этому поводу. 0 Quote Link to comment Share on other sites More sharing options...
AlexDW Posted August 27, 2023 at 05:46 PM Share Posted August 27, 2023 at 05:46 PM В 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'])) 1 Quote модули для удобной работы с Opencart Link to comment Share on other sites More sharing options...
DKV666 Posted August 28, 2023 at 11:14 AM Author Share Posted August 28, 2023 at 11:14 AM В 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 эта же переменная или вовсе отсутствует, или имеет другое значение. Именно по этому предложенный вами способ не имеет смысла. Будь всё так просто я бы сюда не писал. 0 Quote Link to comment Share on other sites More sharing options...
МУРЗЕИН Posted August 28, 2023 at 12:05 PM Share Posted August 28, 2023 at 12:05 PM В 28.08.2023 в 16:14, DKV666 сказал: Вы немного не поняли сути проблемы. index() создаёт или перезаписывает $this->session->data['register_token'] исправно. То есть проверка на наличие и актуальность при index() ничего не даст, т.к. переменная переписывается и имеет нужные данные. А вот при выполнении ajax register.php эта же переменная или вовсе отсутствует, или имеет другое значение. Именно по этому предложенный вами способ не имеет смысла. Будь всё так просто я бы сюда не писал. Потому что при обращении к index() register.php переменная перезаписывается, и ты видишь старое значение в get. Не перезыписывай переменную, или проверяй раньше. 0 Quote Link to comment Share on other sites More sharing options...
DKV666 Posted August 28, 2023 at 01:33 PM Author Share Posted August 28, 2023 at 01:33 PM В 28.08.2023 в 15:05, mazein сказал: Потому что при обращении к index() register.php переменная перезаписывается, и ты видишь старое значение в get. Не перезыписывай переменную, или проверяй раньше. И это не верно. Я не к index() register.php обращаюсь, а посредством ajax к register() register.php. Пользователь открывает страницу рега вызывая index(), index() создаёт или перезаписывает переменную в сессии, пользователь заполняет форму и отправляет её в функцию register() в которой считывается значение переменной в сессии. В index() переменная пишется и читается правильно, а в register() её или нет вообще, или она имеет значение предыдущего обновления страницы. 0 Quote Link to comment Share on other sites More sharing options...
mpn2005 Posted August 29, 2023 at 03:33 AM Share Posted August 29, 2023 at 03:33 AM В 28.08.2023 в 16:33, DKV666 сказал: И это не верно. Я не к index() register.php обращаюсь, а посредством ajax к register() register.php. Пользователь открывает страницу рега вызывая index(), index() создаёт или перезаписывает переменную в сессии, пользователь заполняет форму и отправляет её в функцию register() в которой считывается значение переменной в сессии. В index() переменная пишется и читается правильно, а в register() её или нет вообще, или она имеет значение предыдущего обновления страницы. Вам всё правильно указали. Страница может быть открыта на соседней вкладке. Или браузер может дёрнуть саму страницу. Может какой-то плагин в браузере. Токен для сессии достаточно один раз генерировать, чтобы потом не ловить вот такие приключения. 0 Quote Link to comment Share on other sites More sharing options...
Solution DKV666 Posted August 29, 2023 at 08:30 AM Author Solution Share Posted August 29, 2023 at 08:30 AM В 29.08.2023 в 06:33, mpn2005 сказал: Вам всё правильно указали. Страница может быть открыта на соседней вкладке. Или браузер может дёрнуть саму страницу. Может какой-то плагин в браузере. Токен для сессии достаточно один раз генерировать, чтобы потом не ловить вот такие приключения. Интересные вы ребята... То есть по вашей логике если что-то дёргает повторно страницу переменная меняется на предыдущее значение вместо обновления на новое значение, или вовсе отсутствует. Ещё раз повторяю, переменная не меняется на новую, у неё не происходит изменения на новое значение, переменная равна предыдущему значению при предыдущем обновлении страницы, или полностью отсутствует именно при ajax запросе. Никакие две три страницы никто не открывает, каким образом браузер в вашей логике самостоятельно может дёргать страницу ели этого вообще нет в коде мне вообще не понятно. Если бы всё было так как вы мне втираете переменная менялась бы на новое уникальное значение, а этого не происходит, вместо этого откуда-то подтягивается старое значение которого по логике там быть вообще не должно. А изредка значение вообще отсутствует. Как в вашей логике обновление страницы с чётко прописанным кодом заменить значение переменной может её полностью удалять я вообще понимать отказываюсь. В общем я закрываю тему. От вас толку как от козла молока. Мне проще самому разобраться, чем тратить время в попытке заставить упрямых хотя бы раз вдумчиво прочитать то что я написал. 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.