会话变量在Codeigniter php中的redirect()上重置

会话变量在Codeigniter php中的redirect()上重置,php,codeigniter,xampp,wamp,Php,Codeigniter,Xampp,Wamp,我面临一些奇怪的问题,会话变量在操作重定向时被重置 我使用Codeigniter并在登录后重定向到仪表板操作,在使用DB验证凭据后在登录操作中获取数据,但当我使用redirect()重定向到仪表板时,会话变量消失 Admin.php <?php class admin extends CI_Controller { function login() { $login = $this->Admin_model->login($this->i

我面临一些奇怪的问题,会话变量在操作重定向时被重置

我使用Codeigniter并在登录后重定向到仪表板操作,在使用DB验证凭据后在登录操作中获取数据,但当我使用redirect()重定向到仪表板时,会话变量消失

Admin.php

<?php class admin extends CI_Controller 
{
    function login()
    {
        $login = $this->Admin_model->login($this->input->post()); // <-- verify data and set to session
        if($login)
        {
            $this->session->set_flashdata("success","Logged in Successfully");
            var_dump($_SESSION); // <-- able to fetch data from session
            // exit();
            redirect("admin/dashboard");
        }
        else
        {
            $this->session->set_flashdata("error","Invalid Credentials!! Please Try Again!!");
            redirect("admin");
        }
    }

    function dashboard()
    {
        var_dump($_SESSION); // <-- session data is vanished and not able to get userdata('id')
        exit();
        if($this->session->userdata('id') != '')
        {
            $data['active_tab'] = "dashboard";
        }
        else
        {
            redirect("admin");
        }
    }
?>
<?php Class Admin_Model extends CI_Model
{
    function login($data)
    {
        $user = $this->db->get_where("users",array("username" => $data['username'],
                                     "password" => md5($data['password']),
                                     "is_active" => "1")
                                    )->row_array(); 
        if(!empty($user))
        {
            $this->set_user_session($user);
            return true;
        }
        else
        {
            return false;
        }
    }

    function set_user_session($login)
    {
        $arr = array();
        $arr["id"] = $login["id"];
        $arr["username"] = $login["username"];
        $this->session->set_userdata($arr);
    }
?>

Admin\u model.php

<?php class admin extends CI_Controller 
{
    function login()
    {
        $login = $this->Admin_model->login($this->input->post()); // <-- verify data and set to session
        if($login)
        {
            $this->session->set_flashdata("success","Logged in Successfully");
            var_dump($_SESSION); // <-- able to fetch data from session
            // exit();
            redirect("admin/dashboard");
        }
        else
        {
            $this->session->set_flashdata("error","Invalid Credentials!! Please Try Again!!");
            redirect("admin");
        }
    }

    function dashboard()
    {
        var_dump($_SESSION); // <-- session data is vanished and not able to get userdata('id')
        exit();
        if($this->session->userdata('id') != '')
        {
            $data['active_tab'] = "dashboard";
        }
        else
        {
            redirect("admin");
        }
    }
?>
<?php Class Admin_Model extends CI_Model
{
    function login($data)
    {
        $user = $this->db->get_where("users",array("username" => $data['username'],
                                     "password" => md5($data['password']),
                                     "is_active" => "1")
                                    )->row_array(); 
        if(!empty($user))
        {
            $this->set_user_session($user);
            return true;
        }
        else
        {
            return false;
        }
    }

    function set_user_session($login)
    {
        $arr = array();
        $arr["id"] = $login["id"];
        $arr["username"] = $login["username"];
        $this->session->set_userdata($arr);
    }
?>


在xampp和wamp中尝试了这一点,但问题仍然是一样的,任何帮助都将不胜感激。

您必须使用
this->session->set_userdata()
来设置会话<代码>此->会话->设置\uFlashData()用于设置下次操作后删除的闪存消息。

您使用的是哪个版本的CodeIgniter?您可以尝试以下步骤

  • 转到system/libraries/Session/Session.php
  • 通过添加
    /
    注释
    会话\u start()
    。我们要重新定位会话n_start()
  • 查找(
    使用ctrl+f
    )一条注释,上面写着
    安全为王
    。注释掉该注释下的所有行,直到函数结束。在我的例子中,我注释掉了行号315-320
  • 在第282行中,更改此行
    ini_集('session.name',$params['cookie_name')
    to
    ini\u集('session.id',$params['cookie\u name')
  • 注释掉下面几行

    第108行//会话设置保存处理程序($class,TRUE);
    第290-296行
    //会话设置cookie参数(
    //$params['cookie_lifetime'],
    //$params['cookie_path'],
    //$params['cookie\u domain'],
    //$params['cookie\u secure'],
    //TRUE//HttpOnly;是的,出于安全原因,这是有意的,不可配置
    // );
    第305行//ini\u集('session.gc\u maxlifest',$expiration)

  • 转到main index.php,它是第一个index.php,与“应用程序”、“系统”、“用户指南”等子目录位于同一目录中

  • 希望这可以帮助您……

    我正在使用相同的方法,即$this->session->set_userdata($arr);设置会话变量,它也会设置,但在检入仪表板操作后会消失。您使用的是什么CI版本和什么PHP版本?如果您为$_会话数组赋值,它是否有效?我的CI版本是3.1.0和php 7.2.18早期的3.1.x版本中报告了一些问题,请尝试升级到最新的3.1.11,请参见我的答案:@Vickel有正确的答案。您需要升级您的CI版本。我的同一代码正在工作,但突然停止工作,仍然需要更新CI?这会导致错误
    遇到PHP错误严重性:警告消息:ini_set():会话处于活动状态。此时无法更改会话模块的ini设置文件名:session/session.php行号:305。。。。。!!!!我们需要注释出更多的行以使其工作,但是您能解释一下我们正在禁用的所有东西吗?PHP7升级-*已知会话/COOKIE错误-将PHP5升级到PHP7将解决已知会话/COOKIE错误。$this->session->set_userdata()似乎有问题;每次重定向时,cookie值都会被覆盖。@NitishLad您还评论了什么,您能告诉我吗?