2010-08-16 68 views
2

我寫我自己的PHP驗證碼腳本,用JPEG頭,這樣我就可以說使用jQuery的AJAX調用刷新驗證碼

<img src="captcha.php"> 

它的工作原理是存儲驗證碼的值到會話變量。當用戶無法閱讀時,我希望它可以刷新。

我第一次嘗試

$("#refresh").click(function() { 
    $("#captcha").attr("src","captcha.php"); 
}); 

當然,這沒有任何意義的,但是,我需要做一個Ajax調用來代替。 你會如何推薦我這樣做?

P.S.我也試過

$.ajax({ 
    url: "captcha.php", 
    success: function(result) { 
     $("#captcha").attr("src",result); 
    } 
}); 
+0

也許,第一次嘗試時,將查詢字符串添加到php腳本的url可以改爲工作? – 2010-08-16 08:16:19

+0

嗯,第一種方法的問題是php在我做任何事情之前都運行在服務器端,所以在加載頁面之後調用php腳本根本行不通。如果我可以用ajax找出一種方法(如第二個例子),它可能會工作,雖然... – codersarepeople 2010-08-16 08:37:51

+0

驗證碼生成腳本在附加隨機查詢變量之前輸出全套「no cache」標題,以便使盡可能確保每次獲取圖像的新副本。 – 2010-08-16 15:28:29

回答

5

第一種方法實際上對我來說很有意義:

$("#refresh").click(function() { 
    $("#captcha").attr("src","captcha.php?r=" + Math.random()); 
}); 

我認爲captcha.php所做的唯一事情就是在會話變量中存儲captcha值,並輸出驗證碼圖像,只要它被訪問。

因此,當您再次設置圖像的src併爲其添加查詢字符串變量時,請求會再次發送到服務器腳本「captcha.php」,然後重新生成驗證碼並存儲會話變量中的新值。

0

這是有道理的存儲在_SESSION變量的實際CAPTHCHA字符串,但應明確指定的URL狀態:

$.ajax({ 
    url: "captcha.php?generateNew", 
    success: function(result) { 
     $("#captcha").attr("src","captcha.php?foo="+Math.random()); 
    } 
}); 

你的PHP文件裏:

if(isset($_GET['generateNew']){ 
    $_SESSION['captchaString'] = generateCaptchaString(); 
}else{ 
    dumpCaptchaImage(); 
}