codeigniter kill会话但在重定向时使用flashdata

时间:2016-02-04 09:10:07

标签: php codeigniter

我正在尝试编写一个函数来杀死我的用户会话,如果他们在数据库中的状态(对于公司或用户)更改为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');
    }
}

2 个答案:

答案 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);
}