Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > php и cookie


Автор: AGENTxXx 6.4.2011, 12:57
Добрый день! Столкнулься с такой проблемой: У меня при регистрации на лету проверяется доступен ли данный ник и правильно ли введена капча. 
Взаимодействие провожу через cookie. 
Т.е. жду пока функция написанная в php файле запишет значение в cookie и потом проверяю...
Проблема в том, что делаю это я в цикле while с условием: пока не поменяется значение по умолчканию брать куки. А так же стоис setTimeOut чтобы происходила пауза в запросах куки. Для получения куки использую функцию по умолчанию (которую можно везде найти)...
И что же в итоге...: в Opera все хорошо выполняется без всяких ошибок, а вот в FireFox происходит вис браузера как раз на вызове getCookie().. Если в эту функцию добавить например alert то начинает работать все нормально, но эт не решение я считаю...
Может кто сталкивался с такой проблемой ну или другой вариант решения кто нибудь придложет? =)
ВСЕМ СПАСИБО! =))

Автор: KIRINDORF 6.4.2011, 13:32
А в FF куки разрешены?

Автор: Muerto 6.4.2011, 13:38
механизм не понятен, куки нужно создавать до первого вывода данных... ибо они передаются через заголовок
иначе работай только с JS и ставь их через JS

Автор: AGENTxXx 6.4.2011, 19:45
Куки включены, но работают в FF странно. Если ставишь только на сессию, то они все равно работают как постоянные. В общем, давайте с кодом напишу, друг что выясниться:
Обычные функции:
Код

function setCookie (name, value, expires, path, domain, secure) {
      document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function getCookie(name) {
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
        offset = cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = cookie.indexOf(";", offset)
            if (end == -1) {
                end = cookie.length;
            }
            setStr = unescape(cookie.substring(offset, end));
        }
    }
    return(setStr);
}


Тут непосредственно поле для ввода:
Код

<input type='text' id='fCode' name='code' onkeyup='try{checkSecure();}catch(e){}' size='7' maxlength='6' />


Тут функции:
Код

function checkSecure(){
    chf11=0;
    var c=5;
    setCookie("c","5");
    var l=document.getElementById('fCode');
    if (l.value.length<6){
        document.getElementById('chf11').innerHTML='<img alt="" border="0" src="http://nauchilsya.ru/images/reg/er.png" align="absmiddle" width="16" height="16">';
    }
    else if (l.value.length>=6){        
        var cc=document.getElementById('fCode').value;
        document.getElementById('chf11').innerHTML='<img alt="" border="0" src="http://nauchilsya.ru/images/reg/load.gif" align="absmiddle" width="16" height="16">';
    document.getElementById("verif").innerHTML="<iframe id='verif' src='captchver.php?&cpch="+cc+"' width='0' height='0' frameborder='0' scrolling='no'></iframe>";
    var cap=5;
    while (cap==5)
    {
        setTimeout('getCookie("c")',200);
        cap = getCookie("c");
    }
    if (cap==0)
    {
        document.getElementById('chf11').innerHTML='<img alt="" border="0" src="http://nauchilsya.ru/images/reg/er.png" align="absmiddle" width="16" height="16">';
    }
    else
    {
        chf11=1;
        document.getElementById('chf11').innerHTML='<img id="ddd" alt="" border="0" src="http://nauchilsya.ru/images/reg/take.png" align="absmiddle" width="16" height="16">';
    }
    }
    return chf11;
}


В строке:
Код

document.getElementById("verif").innerHTML="<iframe id='verif' src='captchver.php?&cpch="+cc+"' width='0' height='0' frameborder='0' scrolling='no'></iframe>";

Отправляется значение и если оно совпало, то иконка - Ок иначе иконка ерр...

В общем, понимаю что это вообще может быть тупо реализовано, так как не нашел примера как это сделать, и в итоге сам вот смог реализовать так. Может кто нибудь простой пример кинет, который бы проверял значение с помощью пхп... ну типа капчи. чтобы значение например хранилось в БД...

Автор: Muerto 7.4.2011, 00:26
AGENTxXx, Я здесь ни грамму php не увидел, вам в раздел javascript

Но в любом случае пробежался по коду - чет логики не нашел...

Хотите капчу? используйте сессии, проверяйте через Ajax Запросом...


Автор: AGENTxXx 7.4.2011, 10:44
Ну вот в последней строке, которая оформлена в виде кода, там обращение к php файлу идет. С Ajax'ом не знаком... 
И реально, нужно скорее всего в js писать, а не в php... Ладно, попробую в другом разделе получить ответ. Всем спасибо за помощь!

Автор: Muerto 7.4.2011, 12:55
AGENTxXx, Ваш скрипт глючит - потому что он имхо в корне не верен и не правилен...

Его нужно переписать  - хотите капчу используйте сессии

Ваша капча будет отпугивать людей, но не защищать от ботов...

В интернете множество скриптов капч, которые можно взять как пример...

В любом случае удачи в разделе javascript  smile 

Автор: AGENTxXx 2.10.2011, 21:43
Что т уже позабыл про этот вопрос.
Решил проблему реализацией на ajax! 
Работает на УРА!

Всем спасибо, кто помогал)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)