程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> thinkphp-Thinkphp框架下,驗證碼問題

thinkphp-Thinkphp框架下,驗證碼問題

編輯:編程綜合問答
Thinkphp框架下,驗證碼問題

public function myses(){
import("ORG.Util.Date");
$Setime=session('time');
$Date=new Date;
if($Setime!=NULL){
$diff=$Date->dateDiff("$Setime","s");
if($diff>=10){//判斷是否過期
$Setime=$Date->dateAdd($number = 10, $interval = "s");//設置過期時間
session('time',$Setime);//將過期時間存在session裡面
session('rand',rand(11111,99999));
echo session('rand');
echo 1111;//session存在,但是時間超過3分鐘,重新生成驗證碼
}
else{
echo $diff;echo "
";
echo session('time'); echo "
";
echo session('rand'); echo "
";

echo 2222;//3分鐘內再次獲取輸出該標示
}
}
else {
$Setime=$Date->dateAdd($number = 10, $interval = "s");//設置過期時間
session('time',$Setime);//將過期時間存在session裡面
session('rand',rand(11111,99999));
echo session('rand'); echo "
";
echo session('time'); echo "
";
echo 3333;//session值沒有被設置,生成新的驗證碼
}
}

邏輯應該沒有錯誤,不知道是哪個用法不對,由於對session不熟悉,想這樣通過在session中存一個過期時間,如果過期則重新生成。1、幫忙把以上代碼改通,2、有更好實現該功能的方法也可以

最佳回答:


終於找到問題了
1、對session理解不夠,
2、上面代碼中的問題是:
條件if($Setime!=NULL),其中$Settime是通過dateAdd得來的,是一個**Date對象**

所有if不會判空,但是作為$diff=$Date->dateDiff("$Setime","s"); dateDiff返回的是**字符串**
在代碼中應該 session('time',$Setime->format());//將過期時間存在session裡面

完整修改後的代碼應該是:
function myses(){
import("ORG.Util.Date");
$Setime=session('time');
$Date=new Date;
if($Setime!=NULL){
$diff=$Date->dateDiff("$Setime","s");
if($diff<=0){//判斷是否過期
$Setime=$Date->dateAdd($number = 60, $interval = "s");//設置過期時間
session('time',$Setime->format());//將過期時間存在session裡面
session('rand',rand(11111,99999));
return session('rand');//session存在,但是時間超過1分鐘,重新生成驗證碼
}
else{
return session('rand');//1分鐘內再次獲取輸
}
}
else {
$Setime=$Date->dateAdd($number = 60, $interval = "s");//設置過期時間
session('time',$Setime->format());//將過期時間存在session裡面
session('rand',rand(11111,99999));
return session('rand');//session值沒有被設置,生成新的驗證碼
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved