предотвратить запрос к генератору капчи от YSlow - PullRequest
0 голосов
/ 17 сентября 2011

У меня довольно простая капча, что-то вроде этого:

<?php
    session_start();
    function randomText($length) {
        $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
        for($i=0;$i<$length;$i++) {
            $key .= $pattern{rand(0,35)};
        }
        return $key;
    }
    $textCaptcha=randomText(8);
    $_SESSION['tmptxt'] = $textCaptcha;
    $captcha = imagecreatefromgif("bgcaptcha.gif");
    $colText = imagecolorallocate($captcha, 0, 0, 0);
    imagestring($captcha, 5, 16, 7, $textCaptcha, $colText);

    header("Content-type: image/gif");
    imagegif($captcha);
?>

проблема в том, что если у пользователя установлен YSlow, изображение запрашивается 2 раза, поэтому капча регенерируется иникогда не совпадать с тем, который вставил пользователь.

Я видел, что это всего лишь запрос второй раз, если я передаю заголовок типа содержимого как gif, если я печатаю его как обычный php, этого не происходит.

У кого-нибудь есть подсказки по этому поводу?как я могу предотвратить это или определить, что второй запрос сделан YSlow, чтобы больше не генерировать капчу.

С уважением, Тень.

1 Ответ

0 голосов
/ 28 декабря 2011

YSlow запрашивает компоненты страницы при запуске, поэтому кажется, что ваша проблема в тех случаях, когда у пользователя установлен YSlow и он настроен на автоматический запуск при каждой загрузке страницы.

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

Но к вашему первоначальному вопросу об обнаружении второго запросасделанный YSlow, это возможно, если вы посмотрите на полученные заголовки HTTP.

Я только что выполнил тест и обнаружил, что эти заголовки отправлены с запросом YSlow.User-Agent настроен на соответствие браузеру (в моем случае Firefox), но вы можете проверить наличие X-YQL-Depth в качестве сигнала.(YSlow использует YQL для всех своих запросов.)

Array
(
    [Client-IP] => 1.2.3.4
    [X-Forwarded-For] => 1.2.3.4,  5.6.7.8
    [X-YQL-Depth] => 1
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
    [Accept-Encoding] => gzip
    [Host] => www.example.com
    [Connection] => keep-alive
    [Via] => HTTP/1.1 htproxy1.ops.sp1.yahoo.net[D1832930] (YahooTrafficServer/1.19.5 [uScM])
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...