检测用户登录状态:(思想):
一式:用户的登陆信息记录在一个表中,用户登陆表增加一行,用户退出,删除那一行
二式:登录标识:登录成功后添加登录标识到数据表中,当执行强制退出就设置为0; 在基类(刷新)中进行检测:session(login_token), db(login_token),
代码:采用第二种:token
// 步骤:
// 1. 用户登录后:获取标识:
$login_token = uniqid();
// 2. 将标识存入session
$_SESSION['admin']['login_token'] = $login_token ;
// 3. 数据表中(更新)
$model->updateManagerById($login_token, $mid);
// 4. 用户登录成功后,
// 前端操作:点击按钮,设置登录标识:0
$(function(){
// 点击强制退出
$('.exit').on("click", function () {
// 获取manager id
var manager_id = $(this).attr("data-id");
var manager_name = $(this).attr("data-name");
var d = $.dialog({
type: 'warning',
message: '你确认要强制退出管理员:' + manager_name + ' ?',
buttons: [
{
text: '确认', type: 'primary', callback: function () {
// 执行按manager_id 强制退出
exitManagerById(manager_id);
}
},
{
text: '取消', type: 'cancel', callback: function () {
d.close();
return false;
}
}
]
});
});
// 按manager_id 强制退出管理员
function exitManagerById(manager_id) {
$.ajax('/manager/exit', {
type: 'POST',
data: {manager_id: manager_id},
dataType: 'json',
success: function (data) {
console.log(data);
if (data.code == 1) {
$.dialog({
type: 'success',
delay: 2000,
delayShow: 0,
message: data.message,
delayCallback: function () {
location.href = data.data.href
}
})
} else {
$.dialog({
type: 'warning',
delay: 2000,
delayShow: 0,
message: data.message
})
}
}
})
}
});
// 5. 后端:思想:用户的每个操作都会调用的类(基类)里添加一个方法,并调用(刷新)
// 调用
function __construct(){
// 强制退出
self::checkLoginToken();
}
/**
* 检测登录标识状态:session 中的login_token是否一致
* 1. 根据manager_id 获取login_token
* 2. 根据从数据库查出的login_token 与sessin 中的login_token 进行对比。除超级管理员
*/
public function checkLoginToken(){
// 1. 根据manager_id 获取login_token
$model = ModelFactory::M('ManagerModel');
$token = $model->getManagerById($_SESSION['admin']['manager_id'])['login_token'];
// 2. 根据从数据库查出的login_token 与sessin 中的login_token 进行对比
if($token != $_SESSION['admin']['login_token']){
unset($_SESSION['admin']);
header("Location:/manager/login");
}
}
注:[dialog] 是一个jquery 框架