2013-06-02 7 views
0

Я использую Simple PHP Captcha в форме и отлично работает в Firefox, Opera и IE, но не в Chrome. В изображение загружается штраф, и я могу передать капчи, но он терпит неудачу, когда я пытаюсь проверить это следующим образом:Captcha не работает в chrome

if($_POST['CaptchaCode'] === $_SESSION['captcha']['code']) 

когда я echo $_POST['CaptchaCode'] я получаю правильный код, который я вошел, но когда я echo $_SESSION['captcha']['code'] тогда я получить другой код, чем я видел в captcha. Похоже, он был создан.

Заранее спасибо.

+0

Вы уверены, что это связано с вашим браузером? Это кажется действительно странным, потому что все здесь является серверным. Если вы зашли туда (http://labs.abeautifulsite.net/simple-php-captcha/) с помощью Chrome, есть ли разница между изображением и кодом в var_dump? – Jerska

+0

Я уверен, что он работает на моем ПК в Firefox, Opera и IE, но не в Chrome. Когда я перехожу на сайт, который вы написали, он работает, как и в Chrome. Но есть разница. На странице, которую вы опубликовали, используется, вероятно, только один файл php, в отличие от моей страницы, который отправляет данные формы в другой файл php. – cozzy

ответ

0

Я нашел решение, которое не идеально, но оно работает. Я добавил скрытый вход в моей форме, containt хэш правильный код, как это:

<input type="hidden" name="hashCode" value=<?php echo "'" . md5($_SESSION['captcha']['code']) . "'" ?>> 

, а затем я выполнить проверку:

if(md5(strtoupper($_POST['captchaCode'])) === $_POST['hashCode']) 

Теперь он работает и в Chrome. Но я все равно хотел бы знать, почему после того, как форма отправлена ​​в Chrome, изменились $_SESSION['captcha']['code'].

+0

Вы отправляете форму на страницу, где $ _SESSION ['captcha'] = captcha(); (например, отправить его на ту же страницу)? Потому что, если вы это сделаете, новый код captcha будет изменен, и было бы совершенно нормально, что он изменится. – Jerska

+0

Нет, я этого не делаю. Если бы я это сделал, это не сработало бы в любом браузере. – cozzy

+1

Тогда я не вижу причин, почему это не работает. Одна заметка для вас: ваше обходное решение идет прямо в противоположную цель captcha (знайте, действительно ли это человек, который заполняет капчу).MD5 больше не защищен, и огромные хэш-словари уже существуют. Таким образом, вы определенно не должны размещать его на своей странице, так как у хорошего программиста не будет никаких трудностей с поиском кода кода для отслеживания MD5. – Jerska

1

У меня была та же проблема. «Простой PHP Captcha» работал не только в Chrome.

Мое дело, вероятно, очень специфично, но может быть полезно. Во-первых, вы должны знать, что:

  • Мое приложение возвращает страницу ошибки 404, которая содержит контактную форму с CAPTCHA.
  • Google Chrome ищет favicon.ico, даже если вы не объявляете какой-либо значок в своем разделе <head>. В этом случае Chrome выглядит в корне (/favicon.ico).

Остальное довольно очевидно :) На моем сервере не было Favicon, так что моя страница «связаться с нами» нагружают CAPTCHA изображение, но дополнительно Google послал запрос на favicon.ico, мой сервер возвратил ошибку 404 страница, которая также содержит контактную форму с CAPTCHA, которая переписала код в $_SESSION.

Так что я решил эту проблему просто добавив favicon.ico :)

Чтобы сделать этот ответ более общим, проблема наверняка, что код CAPTCHA, получает регенерировать из какой-либо причины.

Смежные вопросы