0

I use Captcha Code plugin

When the wp rocket plugin plugin is active, the same captcha code as before will be displayed every time the page is refreshed, This problem persists until I clear the cache wp rocket, What is the cause of this problem? I think this is the function that generates the captcha code

function ctl_captcha_generate_code()
{
    //Settings: You can customize the captcha here
    $image_width = 120;
    $image_height = 40;

    $characters_on_image = get_option('wpcaptcha_total_no_of_characters');
    if($characters_on_image < 3 || $characters_on_image > 6) $characters_on_image = 6;

    $wpcaptcha_type = get_option('wpcaptcha_type');
    $wpcaptcha_letters = get_option('wpcaptcha_letters');

    $font = dirname(__FILE__) . '/monofont.ttf';

    //The characters that can be used in the CAPTCHA code.
    //avoid confusing characters (l 1 and i for example)
    if(!empty($wpcaptcha_type) && $wpcaptcha_type == 'alphanumeric')
    {
        switch($wpcaptcha_letters)
        {
            case 'capital':
                $possible_letters = '23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
                break;
            case 'small':
                $possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
                break;
            case 'capitalsmall':
                $possible_letters = '23456789bcdfghjkmnpqrstvwxyzABCEFGHJKMNPRSTVWXYZ';
                break;
            default:
                $possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
                break;
        }
    }
    elseif(!empty($wpcaptcha_type) && $wpcaptcha_type == 'alphabets')
    {
        switch($wpcaptcha_letters)
        {
            case 'capital':
                $possible_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
                break;
            case 'small':
                $possible_letters = 'bcdfghjkmnpqrstvwxyz';
                break;
            case 'capitalsmall':
                $possible_letters = 'bcdfghjkmnpqrstvwxyzABCEFGHJKMNPRSTVWXYZ';
                break;
            default:
                $possible_letters = 'abcdefghijklmnopqrstuvwxyz';
                break;
        }
    }
    elseif(!empty($wpcaptcha_type) && $wpcaptcha_type == 'numbers')
    {
        $possible_letters = '0123456789';
    }
    else
    {
        $possible_letters = '0123456789';
    }
    $random_dots = 0;
    $random_lines = 20;
    $captcha_text_color="0x142864";
    $captcha_noice_color = "0x142864";

    $code = '';


    $i = 0;
    while ($i < $characters_on_image)
    {
        $code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
        $i++;
    }


    $font_size = $image_height * 0.75;
    $image = @imagecreate($image_width, $image_height);


    /* setting the background, text and noise colours here */
    $background_color = imagecolorallocate($image, 255, 255, 255);

    $arr_text_color = ctl_captcha_hexrgb($captcha_text_color);
    $text_color = imagecolorallocate($image, $arr_text_color['red'],
        $arr_text_color['green'], $arr_text_color['blue']);

    $arr_noice_color = ctl_captcha_hexrgb($captcha_noice_color);
    $image_noise_color = imagecolorallocate($image, $arr_noice_color['red'],
        $arr_noice_color['green'], $arr_noice_color['blue']);


    /* generating the dots randomly in background */
    for( $i=0; $i<$random_dots; $i++ )
    {
        imagefilledellipse($image, mt_rand(0,$image_width), mt_rand(0,$image_height), 2, 3, $image_noise_color);
    }


    /* generating lines randomly in background of image */
    for( $i=0; $i<$random_lines; $i++ ) {
        imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height), mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);
    }


    /* create a text box and add 6 letters code in it */
    $textbox = imagettfbbox($font_size, 0, $font, $code);
    $x = ($image_width - $textbox[4])/2;
    $y = ($image_height - $textbox[5])/2;
    imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);

    ob_start();
    imagejpeg($image);//showing the image
    printf('<img src="data:image/png;base64,%s"/ width="100">', base64_encode(ob_get_clean()));
    imagedestroy($image);//destroying the image instance
    $_SESSION['captcha_code'] = $code;
}

function ctl_captcha_hexrgb ($hexstr)
{
    $int = hexdec($hexstr);

    return array("red" => 0xFF & ($int >> 0x10),
        "green" => 0xFF & ($int >> 0x8),
        "blue" => 0xFF & $int);
}
rk9802710
  • 21
  • 5
  • It's presumably caching the captcha. You'd want to exclude pages with the captcha from the cache. https://docs.wp-rocket.me/article/54-exclude-pages-from-the-cache – ceejayoz Apr 06 '23 at 14:37
  • I put the captcha code in the comments section of the products, I don't want to uncache the single product page, I just want the captcha code not to be cached – rk9802710 Apr 06 '23 at 14:42
  • https://docs.wp-rocket.me/article/1552-captcha-is-not-working "In order for the captcha to be compatible with page caching, it must rely on AJAX (JavaScript) method." "use a captcha solution that is compatible with page caching, like, for example, Google reCaptcha." – ceejayoz Apr 06 '23 at 15:14
  • Before posting my question here, I did a lot of searching, I also came across this link you sent, the plugin doesn't have any java files to put it in the non-cache list. – rk9802710 Apr 07 '23 at 05:37
  • The answer is simple: You need to either turn off caching on pages with this captcha, or pick a different captcha plugin. **The one you are using is not compatible with WP Rocket's caching.** – ceejayoz Apr 07 '23 at 12:10

0 Answers0