pedro Posted October 29, 2013 Report Share Posted October 29, 2013 Даже не знаю баг это или такая техническая реализация, но все же напишу. 1. Открывает страницу с товаром2. Открываем в новой вкладке еще одну страницу с товаром3. Переходим на первую страницу с товаром и пишем комментарий4. Получаем Неверно введена капча Quote Link to post Share on other sites
granata005 Posted March 25, 2015 Report Share Posted March 25, 2015 Да, есть такое... никто не встречал разве? Quote Link to post Share on other sites
Kors Posted March 25, 2015 Report Share Posted March 25, 2015 Судя по тому, что форум не заполнен подобными сообщениями, такое практически встречается редко. Если хотите, чтоб работало в описанной ситуации, то дорабатывать надо, и совсем непросто... Quote Link to post Share on other sites
Kors Posted March 25, 2015 Report Share Posted March 25, 2015 Капча самостоятельная и независимая. Если на странице поставить ДВЕ капчи (иногда бывает такая потребность), то правильно работает лишь одна. Если открыть несколько страниц сайта на разных вкладках, то опять правильно работает капча только на одной из страниц. Предлагаемая доработка исправляет указанные недостатки. Создавалось для версии 2.3.6. Скорее всего, годится и для других версий 2.x. http://simpla-tuning.com/products/kapcha-samostoyatelnaya-i-nezavisimaya 20$ Quote Link to post Share on other sites
yr4ik Posted March 25, 2015 Report Share Posted March 25, 2015 (edited) Корс как всегда на высоте... За 5 строк - 20$ 1) Там где выводится капча <div class="captcha"><img src="captcha/image.php?{math equation='rand(10,10000)'}" alt='captcha'/></div>Меняем на: <div class="captcha"><img src="captcha/image.php?cap={math equation='rand(10,10000)' assign=capnum}{$capnum}" alt='captcha'/></div> <input type="hidden" name="capnum" value="{$capnum}"> 2) captcha/image.php меняем: $_SESSION["captcha_code"] = $code;на: if(!empty($_GET['cap'])) $_SESSION["captcha"][$_GET['cap']] = $code; else $_SESSION["captcha_code"] = $code; 3) И там где идет проверка на php (к примеру view/ProductView.php) меняем if ($_SESSION['captcha_code'] != $captcha_code || empty($captcha_code))на: $captcha_key = $this->request->post('capnum', 'string'); if (empty($captcha_code) || empty($_SESSION['captcha'][$captcha_key]) || $_SESSION['captcha'][$captcha_key] != $captcha_code) Это так, самая примитивная реализация. Но я думаю вполне достаточно... Edited March 26, 2015 by yr4ik Quote Link to post Share on other sites
Kors Posted March 26, 2015 Report Share Posted March 26, 2015 Если Вы пишете решение, делайте предварительно хотя бы минимальные проверки.Например, Ваш метод совершенно не работает, если задействованы две капчи, одна с captcha/image.php?cap=, другая - обычная. В таких случаях Ваш код if(!empty($_GET['cap'])) $_SESSION["captcha"][$_GET['cap']] = $code; else $_SESSION["captcha_code"] = $code; задавая данные для одной капчи, будет элементарно портить данные другой... Это так, самая примитивная реализация.Согласен с оценкой. Но даже примитивная реализация должна работать правильно... Quote Link to post Share on other sites
yr4ik Posted March 26, 2015 Report Share Posted March 26, 2015 (edited) Если Вы пишете решение, делайте предварительно хотя бы минимальные проверки.Например, Ваш метод совершенно не работает, если задействованы две капчи, одна с captcha/image.php?cap=, другая - обычная. В таких случаях Ваш код if(!empty($_GET['cap'])) $_SESSION["captcha"][$_GET['cap']] = $code; else $_SESSION["captcha_code"] = $code; задавая данные для одной капчи, будет элементарно портить данные другой... Да хоть 10 капч! И что будет? Где будет портится? Если нет GET cap то пишется в captcha_code, а не captcha. Это я специально оставил что бы не ломались старые проверки.... Edited March 26, 2015 by yr4ik Quote Link to post Share on other sites
Kors Posted March 26, 2015 Report Share Posted March 26, 2015 Ваша правда. Виноват, недосмотрел. Тогда остаются более мелкие замечания: 1. В view/ProductsView.php есть строки // Приберем сохраненную капчу, иначе можно отключить загрузку рисунков и постить старую unset($_SESSION['captcha_code']);Этот момент, видимо, тоже надо доработать... 2. Ваш пункт 1 - не могли бы Вы ТОЧНО написать, для какого файла это? 3. Аналогично пункт 2 весьма неточный- не могли бы Вы ТОЧНО написать, для какого файла это? От того, какие файлы затрагиваются в Ваших пп. 1,3, существенно зависит результат. 4. "Это я специально оставил что бы не ломались старые проверки." При таком подходе остаются недостатки капчи. Например, открыли две вкладки страницы со старой капчей, и уже одна из них не работает. Quote Link to post Share on other sites
yr4ik Posted March 26, 2015 Report Share Posted March 26, 2015 2-4) Я вроде не писал что инструкция изменяет все капчи на сайте... Я просто показал примеры как это можно сделать.2 - любой шаблон где выводится капча3 - любой php где эта капча проверяется4 - ну я сомневаюсь что кто то будет открывать 15 форм обратной связи... Ну в любом случае все зависит от пользователя. Хочет - пусть заменяет все По поводу 1-го не критично но вполне достойно внимания:на примере view/ProductView.php заменяем строку: unset($_SESSION['captcha_code']); на unset($_SESSION['captcha'][$captcha_key]); Quote Link to post Share on other sites
Kors Posted March 26, 2015 Report Share Posted March 26, 2015 Вот Вы сначала написали:Корс как всегда на высоте... За 5 строк - 20$А теперь говорите:Я вроде не писал что инструкция изменяет все капчи на сайте... Я просто показал примеры как это можно сделать.Судя по первой цитате, Вы заявляете, что решение Корса простенькое на пять строк, и ВЫ бесплатно предоставляете аналог.А по второй цитате - это уже не решение полноценное, а так себе - "показал примеры" (может, делать было нечего).Вот Корс своими замечаниями пытается из Вас вытянуть ПОЛНОЦЕННОЕ решение - чтобы было для всех бесплатно и качественно.И это не получается, Вы упираетесь - должно, Вы чувствуете, что качественное решение потребует от Вас не 5 строк, а усилий побольше.Даже не можете толком написать, в каких файлах ТОЧНО надо проводить изменения - смех...И еще вопрос маленький - Вы сами тестировали свой метод? Quote Link to post Share on other sites
yr4ik Posted March 26, 2015 Report Share Posted March 26, 2015 Я решение что не написал? Его нельзя применить ко всем капчам что есть на сайте?Решение не работает? Или я чего то не понимаю? Написанное мной решение в 5 посту действительно занимает 5 строк.И там находится вся необходимая информация! Ее можно применить к любой капче на симпле. Больше расписывать я не вижу смысла. А Вы бы лучше чем разводить длинную спорную дискуссию - написали бы какие файлы править. Быстрее было бы...view/BlogView.phpview/CartView.phpview/FeedbackView.phpview/ProductView.phpview/RegisterView.phpи шаблоны в папке design/ваш_шаблон/html/:cart.tplfeedback.tplpost.tplproduct.tplregister.tpl Quote Link to post Share on other sites
Kors Posted March 26, 2015 Report Share Posted March 26, 2015 Вот теперь уже лучше - с полным-то списком. Повторю: И еще вопрос маленький - Вы сами тестировали свой метод? Quote Link to post Share on other sites
yr4ik Posted March 26, 2015 Report Share Posted March 26, 2015 Нет не тестировал! И что? он не работает ? Quote Link to post Share on other sites
Kors Posted March 26, 2015 Report Share Posted March 26, 2015 Не работает... Quote Link to post Share on other sites
yr4ik Posted March 26, 2015 Report Share Posted March 26, 2015 А да действительно {$capnum} пропустил...Спасибо! Пост поправил Quote Link to post Share on other sites
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.