我正在创建一个web应用程序,当管理员登录时,他会显示2个选项,
一旦管理员登录,他的会话就会启动,并且在该会话中存储他的id和令牌,该令牌有效期为17小时,并且存储在数据库表user_auth中,并且其到期时间为'expired_at(datetime) '和' id(整数)'。如果管理员点击第二个选项,会话中存储的令牌将与数据库中的令牌进行比较,并检查其到期时间。如果令牌匹配且到期,则管理员将显示数据。为此,
帐户(查看)
<a href=" <?php echo site_url('admin/logout') ?> ">logout</a>
<a href=" <?php echo site_url('admin/checkval') ?> ">check valididty of token</a>
admin(控制器)
public function checkval(){
$this->load->library('session');
$goal = $this->session->userdata('user_id');
$uid = $goal[0];
$token = $goal[1];
$this->load->model('loginmodel');
$check_id = $this->loginmodel->token_valid($uid, $token);
if($check_id === TRUE){
$data['query'] = $this->loginmodel->get_last_ten_entries();
$this->load->view('admin/account', $data);
print_r($data);
echo "valid";
}else {
echo "invalid";
}
}
Loginmodel(型号)
public function token_valid($uid, $token)
{
$this->db->select('expired_at');
$this->db->from('user_auth');
$this->db->where('id',$uid);
$this->db->where('token',$token);
$query = $this->db->get();
if ($query->num_rows() > 0)
{
$expired_date = $query->row()->expired_at;
$expired_date = date_create($expired_date);
$cdate = date_create('now');
$interval = date_diff($expired_date,$cdate);
$hour = $interval->h;
if($hour <= 17)
{
return TRUE;
}else
{
return FALSE;
}
}
}
但问题是如果管理员在浏览器的一个标签中登录,而在另一个标签或窗口我打开控制器的checkval(),即http://localhost/ci/index.php/admin/checkval 数据仍然可见。 我希望数据只显示在管理员已登录的选项卡中,只要打开另一个选项卡,就应该启动新会话。
我该怎么做?
感谢您的建议。