PDA

Click to See Complete Forum and Search --> : [RESOLVED] img verification code


vbbit
Apr 24th, 2007, 01:21 PM
Hi guys, I have the code below in one file called img.php, but I odn't know why everytime I refresh the IE, the image code never got changed.


<?php
// initialize session
session_start();
// send header so telling the connectiont that we are about to send an image
header("Content-Type: image/png");

// generate 5 digits random number
$rand = rand(10000, 99999);

// create the hash for the random numbers and put them in the session
$_SESSION['img_random_value'] = md5($rand);

// create the image
$image = imagecreate(60, 30);

// set the background color to white - this has to come first
$bgColor = imagecolorallocate($image, 255, 255, 255);

// set the text color to black
$txtColor = imagecolorallocate($image, 0, 0, 0);

// write the image
//imagefill($image, 0, 0, $bgColor);
imagestring($image, 5, 5, 8, $rand, $txtColor);

// output it to browser
imagepng($image, "verify.png");

// destroy the image to free up the server memory
imagedestroy($image);

?>



<tr>
<td width="33%">
<p style="margin-left: 10"><font color="#FF0000">* </font>Verify Image
Code as shown</td>
<td width="67%" valign="top"><input type="text" name="random" size="5">
<img src="verify.png" width="60" height="30"></td>
</tr>

penagate
Apr 24th, 2007, 01:33 PM
It is possible that it is being cached. Try refreshing by pressing Ctrl+F5 instead of F5. If that works, then it is definitely a caching issue, which you can fix by sending a Cache-Control header.
header('Cache-Control: no-cache');

vbbit
Apr 24th, 2007, 01:43 PM
Yes you are right, I did that ctrl F5, and it works. But I put the code you gave, still go back and refresh/F5, not working :(

vbbit
Apr 24th, 2007, 03:00 PM
ah I just notice that it works with my computer at school and home but not at work, what's going on? is it cause of some settings of the IE on my computer?

kows
Apr 24th, 2007, 03:28 PM
are they all using the same version of IE? you could try clearing your temporary files on the work computer and see if that helps?

you could try using this, a quick 'add-on' to what penagate suggested earlier. taken from PHP.net's header() documentation:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past

alternatively, as a workaround you could always call your image with a recent time stamp as the query string. this way, it will force your client to grab a new copy because a time stamp is always going to be changing.
<img src="img.php?<?php echo time(); ?>" />

edit: and if you still have problems, you could try going a bit overboard:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

vbbit
Apr 24th, 2007, 03:59 PM
ah kows, you are awesome and thanks to P too.

I used the time stamp. Can't help it I need to force the client's computer to do that. Otherwise, who knows other user's computer might have the kind of cach feature i have on my work computer. I hope it wont cause any bad error :wave: