首頁 >後端開發 >php教程 >php session驗證碼不一致總顯示上次驗證碼的解決方法

php session驗證碼不一致總顯示上次驗證碼的解決方法

WBOY
WBOY原創
2016-07-25 09:04:231367瀏覽
  1. $(".login").live('click',function(){

  2. var username=$(".input_user ").val();
  3. var password=$(".input_ps").val();
  4. var code=$('.input_checkcode').val();
  5. if(username= =""){
  6. alert("使用者名稱不能為空");
  7. return false;
  8. }
  9. if(password==""){
  10. alert("密碼不能為空");
  11. return false;
  12. }
  13. var URL="checkLogin.php?";

  14. var DATA="&username="+username+"&password=" +password+"&code="+code;
  15. $.getJSON(URL+DATA,function(json){
  16. if(json.code=='code_error'){
  17. alert('驗證碼錯誤,請重新輸入驗證碼');
  18. }
  19. if(json.username=='true_u'&&json.password=='true_p'){
  20. //alert(json.username+"|"+username+ '...1');
  21. window.location="index.php";
  22. }
  23. if(json.username=='error_u'||json.password=='error_p'){
  24. alert("使用者名稱輸入或密碼輸入錯誤,請檢查後重新登陸!");
  25. window.location="login.php";
  26. }
  27. });
  28. });
複製程式碼

後台checkLogin.php關鍵程式碼:

  1. $code=$_GET['code'];
  2. if($code!=$_SESSION['captchaCode']['content'] )
  3. {$adminInfo['code']='code_error';};
  4. if($row['username']==$username&&$row['password']==$password) {
  5. $_SESSION['username']=$row['username'];
  6. $adminInfo['username']='true_u';
  7. $adminInfo['password']=' true_p';
  8. mysql_close();
  9. }else
  10. if($row['username']!=$username){
  11. $adminInfo['username']='error_u';
  12. }
  13. if($row['password']!=$password){
  14. $adminInfo['password']='error_p';
  15. }
  16. //var_dump($ adminInfo);exit;
  17. echo json_encode($adminInfo);
複製程式碼

具體如下: checkCode.class.php//驗證碼

  1. /*
  2. * Captcha Class base on PHP GD Lib
  3. * @author Design
  4. * @version 1.0
  5. * @copyright js8.in 2010 bbs.it-home.org
  6. * @demo
  7. * include('captchaClass.php');
  8. * $captchaDemo=new Captcha();
  9. ** $captchaDemo->createImage();
  10. */
  11. class Captcha{
  12. //@定義驗證碼圖片高度
  13. private $height;
  14. //@定義驗證碼圖片寬度 private $width;
  15. //@定義驗證碼字元數
  16. private $textNum;
  17. //@定義驗證碼字元內容
  18. private $textContent;
  19. //@定義字元顏色
  20. private $fontColor;
  21. //@定義隨機出的文字顏色
  22. private $randFontColor;
  23. //@定義字體大小
  24. private $fontSize;
  25. //@定義字體大小
  26. private $fontSize;
  27. //@定義字體大小
  28. private $fontSize;
  29. //@定義字體大小
  30. private $fontSize;
  31. //@定義字體大小
  32. private $fontSize;
  33. //@定義字體大小
  34. private $fontSize;
  35. //@定義字體大小
  36. private $fontSize;
  37. //@定義字體大小
  38. private $fontSize;
  39. //@定義字體大小
  40. private $fontSize;
  41. //@定義字型字體
  42. private $fontFamily;
  43. //@定義背景顏色
  44. private $bgColor;
  45. //@定義隨機出的背景顏色
  46. private $randBgColor; //@定義字符語言
  47. private $textLang;
  48. //@定義干擾點數量
  49. private $noisePoint;
  50. //@定義干擾線數量
  51. private $noiseLine;
  52. //@定義是否扭曲
  53. private $distortion;
  54. //@定義扭曲圖片來源
  55. private $distortionImage;
  56. //@定義是否有邊框
  57. private $showBorder; //@定義是否有邊框
  58. private $showBorder; //@定義是否有邊框
  59. // 定義驗證碼圖片來源
  60. private $image;
  61. //@Constructor 建構子
  62. public function Captcha(){
  63. $this->textNum=4;
  64. $this-> fontSize=16;
  65. $this->fontFamily='c:\windows\fontsSIMYOU.ttf';//設定中文字體,可以改成linux的目錄
  66. $this->textLang='en';
  67. $this->noisePoint=30;
  68. $this->noiseLine=3;
  69. $this->distortion=false;
  70. $this->showBorder=false;
  71. }
  72. //@設定圖片寬度
  73. public function setWidth($w){
  74. $this->width=$w;
  75. }
  76. //@設定圖片高度
  77. public function setHeight($h){
  78. $this->height=$h;
  79. }
  80. //@設定字元數
  81. public function setTextNumber($textN){
  82. $this->textNum=$textN;
  83. }
  84. //@設定字元顏色
  85. public function setFontColor($fc){
  86. $this->fontColor=sscanf($ fc,'#%2x%2x%2x');
  87. }
  88. //@設定字號
  89. public function setFontSize($n){
  90. $this->fontSize=$n ;
  91. }
  92. //@設定字體
  93. public function setFontFamily($ffUrl){
  94. $this->fontFamily=$ffUrl;
  95. }
  96. / /@設定字元語言
  97. public function setTextLang($lang){
  98. $this->textLang=$lang;
  99. }
  100. //@設定圖片背景
  101. public function setBgColoror ($bc){
  102. $this->bgColor=sscanf($bc,'#%2x%2x%2x');
  103. }
  104. //@設定乾擾點數量
  105. public function setNoisePoint($n){
  106. $this->noisePoint=$n;
  107. }
  108. //@設定幹擾線數
  109. public function setNoiseLine($n){
  110. $this->noiseLine=$n;
  111. }
  112. //@設定是否扭曲
  113. public function setDistortion($b){
  114. $this->distortion=$b;
  115. }
  116. //@設定是否顯示邊框
  117. public function setShowBorder($border){
  118. $this->showBorder=$border;
  119. }
  120. / /@初始化驗證碼圖片
  121. public function initImage(){
  122. if(empty($this->width)){$this->width=floor($this->fontSize*1.3)*$this- >textNum+10;}
  123. if(empty($this->height)){$this->height=$this->fontSize*2;}
  124. $this->image=imagecreatetruecolor($this- >width,$this->height);
  125. if(empty($this->bgColor)){
  126. $this->randBgColor=imagecolorallocate($this->image,mt_rand(100,255),mt_rand(100,255 ),mt_rand(100,255));
  127. }else{
  128. $this->randBgColor=imagecolorallocate($this->image,$this->bgColor[0],$this->bgColor[1],$ this->bgColor[2]);
  129. }
  130. imagefill($this->image,0,0,$this->randBgColor);
  131. }
  132. //@產生隨機字元
  133. public function randText($type){
  134. $string='';
  135. switch($type){
  136. case 'en':
  137. $str='ABCDEFGHJKLMNPQRSTUVWW3456789' > for($i=0;$itextNum;$i++){
  138. $string=$string.','.$str[mt_rand(0,29)];
  139. }
  140. break;
  141. case 'cn':
  142. for($i=0;$itextNum;$i++) {
  143. $string=$string.','.chr( rand(0xB0,0xCC)).chr(rand(0xA1,0xBB));
  144. } $string=iconv('GB2312','UTF-8',$string); //轉換編碼到utf8 break; } return substr($string,1); } //@輸出文字到驗證碼 public function createText(){ $textArray=explode(',',$this->randText($this->textLang)); $this->textContent=join('',$textArray); if(empty($ this->fontColor)){ $this->randFontColor=imagecolorallocate($this->image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100)); }else{ $ this->randFontColor=imagecolorallocate($this->image,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]); }
  145. for($i=0;$itextNum;$i++){
  146. $angle=mt_rand(-1,1)*mt_rand(1,20);
  147. imagettftext( $ this->圖片,$this->fontSize,$angle,5+$i*floor($this->fontSize*1.3),floor($this->height*0.75),$this-> ;randFontColor,$this ->fontFamily,$textArray[$i]);
  148. }
  149. }
  150. //@產生幹擾點
  151. public function createNoisePoint(){
  152. for($i=0 ;$inoisePoint;$i++){
  153. $pointColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255) );
  154. $imagesetpixel($ this->圖片,mt_rand(0,$this->寬度),mt_rand(0,$this->高度),$pointColor);
  155. }
  156. }
  157. // @產生幹擾線
  158. public function createNoiseLine(){
  159. for($i=0;$inoiseLine;$i++) {
  160. $lineColor=imagecolorallocate($this->image, mt_rand(0,255),mt_rand(0,255),20);
  161. imageline($this->image,0,mt_rand(0,$this->width) ),$this->width,mt_rand(0,$this ->height),$lineColor);
  162. }
  163. }
  164. //@扭曲文字
  165. public function DistortionText (){
  166. $this-> DistortionImage=imagecreatetruecolor($imagecreatetruecolor($ ->寬度,$this->高度);
  167. imagefill($this-> DistortionImage,0,0,$this-> ;randBgColor);
  168. for($x=0;$x 寬度;$x++){
  169. for($y=0;$y高度;$y++ ){
  170. $rgbColor=imagecolorat($this->映像,$x,$y) ;
  171. imagesetpixel($this-> DistortionImage,(int)($x+sin($y/$this) ->高度*2*M_PI-M_PI*0.5)*3),$y,$rgbColor);
  172. }
  173. }
  174. $this->image=$this-> DistortionImage;
  175. }
  176. //@產生驗證碼圖片
  177. public function createImage(){
  178. $this->initImage(); //建立基本圖片
  179. $this->createText(); // 輸出驗證碼字元
  180. if($this-> Distortion){$this-> DistortionText();} //扭曲文字
  181. $this->createNoisePoint(); //產生幹擾點
  182. $this->createNoiseLine(); //產生幹擾線
  183. if($this->showBorder){imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$this->randFontColor );} //加上眉毛
  184. imagepng($this->image);
  185. imagedestroy($this->image);
  186. if($this-> Distortion) {imagedestroy($this->$ DistortionImage);}
  187. return $this->textContent;
  188. }
  189. }
  190. ?>
  191. code.php//新建一個對象,負責圖片的創建以及驗證碼文字寫入會話
  192. session_start();
  193. header("Content-type:image/png");
  194. include('checkCode.class .php');
  195. $captcha5=new Captcha();
  196. //@設定驗證碼寬度
  197. //$captcha5->setWidth(200);
  198. //@設定驗證碼高度
  199. //$ captcha5->setHeight(50);
  200. //@設定字元個數
  201. $captcha5->setTextNumber(4);
  202. //@設定字元顏色
  203. // $captcha5->setFontColor('#ffffff');
  204. //@設定字號大小
  205. //$captcha5->setFontColor('#ffffff');
  206. //@@設定字號大小
  207. //$captcha5-> setFontSize(25);
  208. //@設定字體
  209. $captcha5->setFontFamily('c:\windows\fonts\comic.TTF') ;
  210. //@設定語言
  211. $captcha5->setTextLang('en');
  212. //@設定背景顏色
  213. //$captcha5->setBgColor(' #000000');
  214. //@設定幹擾點數量
  215. //$captcha5->setNoisePoint(600);
  216. //@設定幹擾線數量
  217. /// $captcha5->setNoiseLine(10) );
  218. //@是否設定扭曲
  219. //$captcha5->setDistortion(true);
  220. //@設定是否顯示親密
  221. $captcha5->setDistortion(true);
  222. //@設定是否緊密顯示
  223. $captcha5->setShowBorder(true);
//輸出驗證碼 $code=$captcha5->createImage();$_SESSION['captchaCode']['content']=$code;
//$_SESSION['captchaCode']['time']=microtime();

?>

複製程式碼
  1. 登入。 //登陸頁面,呼叫產生的驗證碼圖片
  2. 驗證碼:
  • php session驗證碼不一致總顯示上次驗證碼的解決方法
    複製程式碼


    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn