我使用此代碼:http://pastebin.com/Q9RXLZEd爲我的註冊頁面。我正在嘗試重新加載驗證碼。驗證碼是PHP文件代碼的正常圖像,內容類型是PNG圖像。重新加載驗證碼問題
我目前的代碼沒有驗證碼刷新或任何東西。
我想到的另一個問題是,驗證碼答案更新的代碼是什麼?如果不是這樣,那麼這並不意味着如果用戶使用刷新鏈接,他們將始終得到驗證碼失敗錯誤?
希夫
我使用此代碼:http://pastebin.com/Q9RXLZEd爲我的註冊頁面。我正在嘗試重新加載驗證碼。驗證碼是PHP文件代碼的正常圖像,內容類型是PNG圖像。重新加載驗證碼問題
我目前的代碼沒有驗證碼刷新或任何東西。
我想到的另一個問題是,驗證碼答案更新的代碼是什麼?如果不是這樣,那麼這並不意味着如果用戶使用刷新鏈接,他們將始終得到驗證碼失敗錯誤?
希夫
,無論你想驗證碼圖像和刷新圖標(獲得一個合適的刷新圖像,並將其重命名爲refresh.jpg)出現包含這個<head>
標籤
<script type="text/javascript">
$(document).ready(function() {
// refresh captcha
$('img#captcha-refresh').click(function() {
change_captcha();
});
function change_captcha()
{
document.getElementById('captcha').src="captcha.php?rnd=" + Math.random();
}
});
</script>
而這種代碼內。請記住,此代碼和上面的代碼(位於<script>
標記內)應位於同一頁面上,以便驗證碼正常工作。
<img src="captcha.php" alt="" id="captcha" />
Type the word:
<input name="user_captcha" type="text" id="captcha-code">
<img src="refresh.jpg" alt="" id="captcha-refresh" />
然後創建一個名爲captcha.php的文件(它根據請求生成png格式的驗證碼圖像)。
<?php
session_start();
header("Content-type: image/png");
$word_1 = '';
for ($i = 0; $i < 4; $i++)
{
$word_1 .= chr(rand(97, 122));
}
$_SESSION['random_number'] = $word_1;
$dir = "./";
$image = imagecreatetruecolor(165, 50);
$font = "whatever.ttf"; // font style you may give any you have/prefer
$color = imagecolorallocate($image, 0, 0, 0);// color
$white = imagecolorallocate($image, 255, 255, 255); // background color white
imagefilledrectangle($image, 0,0, 709, 99, $white);
imagettftext ($image, 22, 0, 45, 30, $color, $dir.$font, $_SESSION['random_number']);
imagepng($image);
?>
然後最後你要檢查用戶輸入文本是否出現在驗證碼匹配或不通過比較$_POST['user_captcha']
和$_SESSION['random_number']
無論你是路過形式的其他值。
N. B .:做不是忘記添加session_start();無論你想要驗證碼圖像。
簡單。只需在生成驗證碼的PHP文件的URL中添加一個隨機參數(例如image.php?param=randomvalue
)。這樣你可以繞過驗證碼圖像的緩存。
的代碼重新加載驗證碼可能是這樣的:
$("#refreshLink").click(function(){
// Create some random string consisting of numbers
var random = (Math.random() + "").substring(2);
// Load a new captcha image by updating the image's src attribute
$("#refresh img").attr("src", "image.php?param=" + random);
});
您還可以稍微調整你的HTML代碼:
<tr>
<td>Captcha:</td>
<td><div id='refresh'><img src='image.php'></div></td>
<td><a id='refreshLink'>Refresh</a></td>
</tr>
關於第二部分的問題:正如@詹姆斯已經說過的 - 如果image.php
在每次請求文件時都正確設置$_SESSION['string']
,用戶將不會收到驗證碼錯誤,因爲只有在提交表單時纔會檢查變量。無論PHP文件實際返回的內容類型如何,都可以設置會話變量。
確保'$ _SESSION ['string']'由'image.php'在生成新的驗證碼時更新,它應該可以工作。 – James
我不能這樣做,因爲內容類型設置爲image.php – user3474238
內容類型無關緊要什麼是內容類型,如果它是一個PHP文件,您可以在其中設置會話變量。 – James