>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Работа Firefox с PHP SESSION & COOKIE http://forum.mozilla-russia.org/viewtopic.php?id=27240 |
Eugene82 > 24-10-2008 10:38:04 |
Здравствуйте, уважаемые знатоки! Хотелось бы найти у вас помощь так как всю голову сломали в поисках ошибки. Есть на нашем сайте страница запроса забытого пароля по имеющемуся мылу http://sunr.ru/index.php?act=forgot_pass. Вся проблема всего лишь в следующем: на странице есть human test - "введите 4 цифры с картинки" - так вот, в IE, Opera этот код работает, а в Firefox нет - значение созданой для данной проверки переменной после показа картинки меняется на другое и после нажатия кнопки "Ок" выводится сообщения "Необходимо ввести код подтверждения." Заменяли сессии на куки. Заметили что в кук пишется левое число - не соответствующее картинке. Ещё было замечено что вроде как сначала пишется правильное значение, а потом перезаписывается новым. Ну и возможно почему-то просто не отрабатывает код присваивания значения А в ИЕ и Опере работает и с сессиями и с кукисами!!! Помогите, пожалуйста, разобраться - это глюк Firefox'a или PHP или ошибка в коде? Хотя эксперты утверждают, что код правильный. Не охота пользователей Файрфокс обламывать! И пересаживать на ИЕ и Оперу... Выделить код Код:<? if (!isset($startpage)){return;} $HTML_CATALOG="html/"; $CONTENT_NAME="Восстановление пароля"; $CONTENT=FORGOT_PASS_FORM(); require "{$HTML_CATALOG}static.htm"; //****************************************************************************** function FORGOT_PASS_FORM($error=""){ global $DB; $table="logins"; $pattern="/((.)+(@)(.)+(\.).+)/"; $mail=TEXT_2_BD($_POST['mail']); $_SESSION['mail_forgot_pass']=$mail; if ($error==""){ // обработка уже введенного адреса if(!empty($mail)){ if(strcmp($_POST['confirmation'],$_SESSION['dfp'])<>0){ return FORGOT_PASS_FORM("Необходимо ввести код подтверждения.<br>Если Вы вводили код, но видите это сообщение - возможно Вы ввели его неверно или Вы используете Mozilla Firefox. Попробуйте использовать Microsoft Internet Explorer или Opera."); //Расширеное сообщение вставлено после обнаружения ошибки } if (!preg_match($pattern,$mail)){ return FORGOT_PASS_FORM("Проверьте правильность написания e-mail."); } $sql="select * from {$table} where `mail`='{$mail}'"; $DB->query($sql,0); $row = $DB->fetch_row(); if (empty($row['id'])) { return FORGOT_PASS_FORM("Е-mail не найден."); } unset($_SESSION['dfp']); return FORGOT_PASS_MAIL($row['mail'],$row['pass']); } } $itogo=""; for($i=0;$i<4;$i++){ $d=rand(0,9); $itogo.=$d; $contron_pic.="<img src=\"i/digit/{$d}.gif\">"; } $_SESSION['dfp']=$itogo; $errortext=""; if (!$error==''){ $errortext=" <table border=\"0\" cellspacing=\"10\"> <tr><td><img src=\"i/stopnew.gif\"></td><td><b>{$error}</b></td></tr> </table>"; } $text=" {$errortext} <form name=\"registration_f\" method=\"POST\" action=\"../index.php?act=forgot_pass\"> <table border=\"0\"> <tr> <td> E-MAIL указанный при регистрации: </td> <td> <input name=\"mail\" type=\"text\" value=\"{$_SESSION['mail_forgot_pass']}\"> </td> </tr> <tr> <td> Код подтверждения: <div>{$contron_pic}</div> </td> <td> <input name=\"confirmation\" type=\"text\" value=\"\"> </td> </tr> <tr> <td> </td> <td> <input type=\"image\" src=\"i/ok.gif\" class=\"pic1\" onMouseOver=\"this.style.border='1px solid #787878';\" onMouseOut=\"this.style.border='1px solid #FFFFFF';\" > </td> </tr> </table> </form> "; return DEFAULT_CONTENT(compress($text)); } //***************************************************************************** function FORGOT_PASS_MAIL($mail,$pass){ global $MAIL; $from=""; $subj="Интернет-магазин - восстановление пароля"; $to="{$mail}"; $text= "<b style='color:red;'>Интернет-магазин - восстановление пароля</b><br> <hr> Ваш логин: <b>{$mail}</b><br> Ваш пароль: <b>{$pass}<br> <hr>"; $MAIL->SEND_MAIL( $from, $to, $subj, $text); return DEFAULT_CONTENT("Пароль отправлен на <b>{$mail}</b>","info"); } ?> P.S. На странице основной регистрации подобный код тоже не работает в Firefox (даже 3.0.3 и без дополнений). =========================== |
Al_H > 24-10-2008 13:52:13 |
Фокс части сборок картинки грузит по нескольку раз. Поэтому если каждый раз картинка высылается вместе с кодом, завязанным на страницу, она никогда не будет соответствовать - картинка будет перегенерирована. |
Shutnik > 24-10-2008 21:15:50 |
Eugene82 Al_H |