代码点火器终止会话,但在重定向时使用闪存数据


codeigniter kill session but use flashdata on redirect

我正在尝试编写一个函数来终止我的用户会话,如果他们在数据库中的状态(对于公司或用户)更改为 false(这工作正常)。

不幸的是,codeigniter 在杀死会话后不会让您轻松set_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');
    }
}

根据编码者的文档,

所有会话数据(包括闪存数据和临时数据)将被销毁 永久且功能将在同一请求期间不可用 销毁会话后。

因此,我建议您删除除重要数据之外的所有会话数据。

$user_data = $this->session->userdata();
foreach ($user_data as $key => $value) {
    if ($key!='__ci_last_regenerate' && $key != '__ci_vars')
       $this->session->unset_userdata($key);
}

不要销毁会话。使用unset_userdata()取消设置不需要的会话。 $this->session->unset_userdata('session_name'); 它可能会解决您的问题。对于其他服务器请求,您可以使用$this->session->keep_flashdata('session_name')