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值沒有被設置,生成新的驗證碼
}
}