【问题标题】:Codeigniter sessions creating new blank rowsCodeigniter 会话创建新的空白行
【发布时间】:2014-05-19 20:43:54
【问题描述】:

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

我写了一些小的测试函数,它们做同样的事情,但它们在一个带有可检索数据的会话中运行良好(这排除了 codeigniter 配置问题)但由于未知的原因仪表板总是建立一个新的空白会话并尝试使用它.我已经束手无策了,需要一双新的眼睛来审视它,看看我显然犯了哪些错误,但我终生无法发现。

<?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();
    }
}
?>

【问题讨论】:

    标签: php codeigniter session


    【解决方案1】:

    你应该检查你的会话配置文件。

    一个例子:

    $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 工作正常,并且您实际上可以回显这些内容,并且仪表板不起作用(并创建一个新会话),那么我完全没有想法,对不起,伙计

    【讨论】:

    • 我的配置已经看起来像了,恐怕这是我尝试的第一件事:(底部的调试代码完全符合程序应该做的工作,这表明我的配置是好吧,我似乎无法在重要的地方复制它
    • 刚刚看到你的额外代码,我很遗憾我错过了;为了清楚起见, setUser 函数可以正常工作,并且当您回显 $this->session->userdata('username');你得到的结果很好,对吧?
    • 在第二个代码中是的。但是,每当我导航到仪表板时,第一个会在数据库中生成一个全新的会话行。此新行的用户数据为空。当仪表板加载而不考虑它的请求方式时,它似乎也会发生。为了澄清,我从仪表板方法中删除了所有代码,所以它绝对什么都不做,尽管如此,它仍然会在加载时创建一个新的空行。
    • 我的错误我没有正确阅读。是的,setUser 函数按预期工作,它在会话中设置所有用户数据,但是当我转到仪表板时,仪表板似乎构建了一个全新的会话并尝试使用它。但是有问题的是这个会话是空的,所以所有对 $this->session->user data($someelement) 的调用都没有返回任何内容
    • 使用对答案的编辑,它现在会在会话表中生成两个空白行,哈哈。我什么都没有:(
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2016-04-01
    • 2013-07-02
    • 2017-03-08
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多