我正在尝试编写一个函数来杀死我的用户会话,如果他们在数据库中的状态(对于公司或用户)更改为false(这很好)。
不幸的是,在终止会话后,codeigniter不会让你轻松地设置set_flashdata。我无法弄清楚如何重新初始化新会话,以便将重定向的flashdata存储到登录页面(并告诉用户它们被引导的原因)。
在这里搜索和谷歌并没有给我任何关于重新创建会话使用的东西。我使用CodeIgniter 3.0.3
帮助程序代码:
function user_active($username)
{
$CI =& get_instance();
$CI->load->database();
$CI->db->where('username', $username);
$CI->db->from('users');
$CI->db->join('company', 'company.orgID = users.orgID');
$query = $CI->db->get();
$result = $query->row_array();
// check company active
if($result['orgStatus'] != TRUE){
$CI->session->sess_destroy();
$CI->session->set_flashdata('flashError', 'Company currently disabled please contact accounts for reactivation');
redirect(site_url(), 'refresh');
}
// check user active
if($result['status'] != TRUE) {
$CI->session->sess_destroy();
$CI->session->set_flashdata('flashError', 'User not active, please contact your administrator');
redirect(site_url(), 'refresh');
}
}
答案 0 :(得分:1)
不要破坏会话。使用unset_userdata()
取消设置不需要的会话。 $this->session->unset_userdata('session_name');
它可以解决您的问题。对于其他服务器请求,您可以使用$this->session->keep_flashdata('session_name')
答案 1 :(得分:1)
根据codeignitier的文档,
将销毁所有会话数据(包括flashdata和tempdata) 永久性和功能在同一请求期间将无法使用 在你破坏会话之后。
所以我建议您删除除重要会话数据之外的所有会话数据。
$user_data = $this->session->userdata();
foreach ($user_data as $key => $value) {
if ($key!='__ci_last_regenerate' && $key != '__ci_vars')
$this->session->unset_userdata($key);
}