代码点火器会话创建新的空白行


Codeigniter sessions creating new blank rows

我正在使用Codeigniter创建一个学生测试系统,但由于某种原因,我的会话数据似乎行为奇怪。在我的登录页面上,用户从下拉列表中选择他们的用户名(我在这个阶段不必是安全的),这会将所选用户的用户 ID 传递给一个函数,该函数在会话中设置用户数据,然后将它们重定向到仪表板页面。现在我的问题是这个。当通过 URL 帮助程序中的重定向或通过导航到本地主机/Progsqs/仪表板手动加载仪表板页面时,会话类将创建一个新的空白会话。

我写了一些小的测试函数,它们做同样的事情,但它们在一个会话中工作正常,具有可检索的数据(这排除了编码点火器配置问题),但由于未知的原因,仪表板总是构建一个新的空白会话并尝试使用它。我处于智慧的尽头,需要一双新鲜的眼睛来看待它,看到我显然犯了的错误,但终其一生都无法发现。

<?php
class Progsqs extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }
    function index()
    {
        $this->login();
    }
    function login()
    {   
        $this->load->model('Progsq_Model');
        $data['users'] = $this->Progsq_Model->getUsers();
        $this->load->view('templates/header.php');
        $this->load->view('progsqs/login.php', $data);
        $this->load->view('templates/footer.php');
    }
    function logout()
    {
        $this->load->helper('url');
        $this->session->sess_destroy();
        redirect(base_url('progsqs/login'));
    }
    function setUser()
    {
        $this->load->helper('url');
        $this->load->model('Progsq_Model');
        $username = $this->Progsq_Model->getUsername($_POST['userlist']);
        $this->session->set_userdata('username', $username);
        echo $this->session->userdata('username');
        //redirect(base_url('progsqs/dashboard'));
    }
    function dashboard()
    {
        echo($this->session->userdata('username'));
        print_r($this->session->all_userdata());
    }
    function profile()
    {
        $this->load->view('templates/header');
        $this->load->view('progsqs/profile');
        $this->load->view('templates/footer');
    }
    function testBuilder()
    {
    }
    /*
        Debugging code for repairing session data
    */
    function inputtest()
    {
        $this->session->set_userdata('somedata', 'This is a test');
        $this->load->helper('url');
        redirect(base_url('progsqs/testoutput'));
    }
    function outputtest2()
    {
        echo($this->session->userdata('somedata'));
        //print_r($this->session->all_userdata());
    }
    function testoutput()
    {
        $this->load->model('Progsq_Model', '', TRUE);
        $data['users'] = $this->Progsq_Model->getUsers();
        $this->load->view('templates/header.php');
        $this->load->view('progsqs/outputtest.php', $data);
        $this->load->view('templates/footer.php');
    }
    function killsession()
    {
        $this->session->sess_destroy();
    }
}
?>

您应该检查会话配置文件。

一个例子 :

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

如果您匹配的 IP sess_expiration中有 0

还要确保这些未设置:

 $config['cookie_prefix']    = "";
 $config['cookie_domain']    = "";

我之前在会话中遇到过问题。

这些应该在应用程序文件夹"/application/config/config.php"的配置文件中

编辑:

        function setUser()
{
    $this->session->set_userdata('username', 'alphabeta');
    header ('Location:' . base_url() . '/go/dashboard');
}
function dashboard()
{
    echo($this->session->userdata('username'));
    print_r($this->session->all_userdata());
}

我把你的两个功能归结为这个。我在服务器上运行了它们,它运行良好。

如果函数setUser工作正常,并且您实际上可以回显出这些东西,而仪表板不起作用(并创建一个新会话),我都没主意了,对不起,伙计