我正在使用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工作正常,并且您实际上可以回显出这些东西,而仪表板不起作用(并创建一个新会话),我都没主意了,对不起,伙计