Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter终止会话,但在重定向时使用flashdata_Php_Codeigniter - Fatal编程技术网

Php codeigniter终止会话,但在重定向时使用flashdata

Php codeigniter终止会话,但在重定向时使用flashdata,php,codeigniter,Php,Codeigniter,我正在尝试编写一个函数,如果我的用户在数据库中的状态(对于公司或用户)更改为false(这可以正常工作),则可以终止用户会话 不幸的是,codeigniter不允许您在终止会话后轻松设置_flashdata。我无法确定如何重新初始化一个新会话,以便存储flashdata以重定向到登录页面(并告诉用户它们被引导出的原因) 在这里搜索,谷歌并没有给我提供任何关于重新创建会话的信息。我使用CodeIgniter 3.0.3 助手代码: function user_active($username) {

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

不幸的是,codeigniter不允许您在终止会话后轻松设置_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');
    }
}

不要破坏会话。使用
unset\u userdata()<代码>$this->session->unset_userdata('session_name')它可能会解决您的问题。对于其他服务器请求,您可以使用
$this->session->keep_flashdata('session_name')

根据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);
}

您必须在每次请求时使用数据库进行验证。意思是每一个请求都做这些事。那和我的问题无关?对我来说,不是。对于这种情况,我要做的是创建一个扩展CI_控制器的主控制器。然后,每个控制器都必须扩展您创建的主控制器。在主控制器的构造函数中,调用当前函数。对我来说,这是最好的方法,也是我曾经做过的。你试过使用$CI->session->sess\u regenate(true)而不是$CI->session->sess\u destroy吗?请再次阅读我的问题,这与杀死会话后使用闪存数据有关。。。我的助手在其实际功能方面工作得很好,我只需要一种在重定向页面使用flash数据的方法