用tp3.2做後台管理,在做用戶登入時遇到一個問題.
1.後台用戶登入之後,一直有效,放了一中午,關掉瀏覽器,用戶登入狀態一直存在,只有點擊登出時才能實現用戶的過期.
不是php的session有效期預設是1440秒(24分鐘),如果客戶端超過24分鐘沒有刷新,當前session會被回收,失效嗎,為啥一直都有效了?
2.用tp怎麼實現使用者登入的時效性問題:使用者不操作的時候,固定時間後自動時效.怎麼實現了.
我的登入部分的程式碼:
if(IS_POST){
$uname=I('post.uname');
$password=md5(I('post.password'));
$res=M('manager')->where("uname='{$uname}'")->find();
if(is_null($res)) {
$this->error("用户名不存在");
return false;
}
if($res['uname']==$uname&&$res['password']==$password){
$_SESSION['uname']=$res['uname'];
$_SESSION['expire']=time()+600;
$this->success('登录成功',U('Rbac/Index/index'));
exit();
}
$this->error("登录失败");
}
我百度看的思路是利用$_Session['expire']來實現,但是我不知道這段程式碼放在什麼位置合適,放在登入檢查時不合適吧,該放在什麼位置了?
// 设置用户登录session登录限制时间
if(isset($_SESSION['expire'])){
if($_SESSION['expire']<time()){
unset($_SESSION['expire']);
$this->error('登录过期,请重新登录','Rbac/Login/login');
}else{
// 刷新时间戳
$_SESSION['expire']=time()+600;
}
}
原理是:設定一個超時時長,如:600,登入時記錄好時間起點,每次頁面刷新,都要檢查是否超時(其實邏輯是:是否登入-是否超時-是否有權限),如果超時,則提示已「登入逾時請重新登入」並跳到登入頁,未逾時,表示使用者仍處於活動狀態,則重置計時起點
$_SESSION['expire']=time() + 600
。