【发布时间】:2015-12-12 08:01:08
【问题描述】:
在我的登录功能中的 User.php 库中,我通过以下方式创建管理会话
$create_session = array(
'is_logged' => true,
'user_id' => $row->user_id
);
$this->CI->session->set_userdata('admin', $create_session);
问题是当我尝试单独取消设置管理会话数据时,它不会取消设置我选择的会话。
变量转储:
Array
(
[__ci_last_regenerate] => 1449906266
[admin] => Array
(
[is_logged] => 1
[user_id] => 1
)
)
库的注销功能:
未取消设置:首选方式
public function logout() {
$user_data = $this->CI->session->userdata('admin');
unset($user_data['is_logged']);
unset($user_data['user_id']);
}
但是当我在下面使用这种方式时,它可以工作
public function logout() {
$this->CI->session->unset_userdata('admin');
}
由于某种原因,我不允许我从会话中的数组中单独取消设置会话数据。
问题如何单独取消设置我的管理会话数组中的 codeigniter 会话数据?
完整的 User.php 库
<?php
class User {
private $user_id;
private $username;
public function __construct() {
$this->CI =& get_instance();
$this->CI->load->library('session');
}
public function login() {
if ($this->validate_password() == true) {
$this->CI->db->select('*');
$this->CI->db->from($this->CI->db->dbprefix . 'user');
$this->CI->db->where('username', $this->CI->input->post('username'));
$query = $this->CI->db->get();
if ($query->num_rows() > 0) {
$row = $query->row();
$create_session = array(
'is_logged' => true,
'user_id' => $row->user_id
);
$this->CI->session->set_userdata('admin', $create_session);
$this->user_id = $row->user_id;
$this->user_group_id = $row->user_group_id;
$this->username = $row->username;
return true;
} else {
return false;
}
}
}
public function is_logged() {
$get_session = $this->CI->session->userdata('admin');
return $get_session['is_logged'];
}
public function logout() {
$user_data = $this->CI->session->userdata('admin');
unset($user_data['is_logged']);
unset($user_data['user_id']);
}
public function validate_password() {
if (password_verify($this->CI->input->post('password'), $this->stored_hash())) {
return true;
} else {
return false;
}
}
public function stored_hash() {
$this->CI->db->where('username', $this->CI->input->post('username'));
$query = $this->CI->db->get($this->CI->db->dbprefix . 'user');
if ($query->num_rows() > 0) {
$row = $query->row();
return $row->password;
} else {
return FALSE;
}
}
}
注意:
我有两个很多会话,一个管理员负责后端,一个目录负责前端,这就是数组中的原因。
【问题讨论】:
-
在旁注中,您的
is_logged()函数可能会导致通知错误,“注意:未定义索引:is_logged”。您可以使用return (array_key_exists('is_logged', $get_session) && $get_session['is_logged'] === true);来确保数组键存在,并根据其存在和值返回一个布尔值。
标签: codeigniter