我正在使用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();
}
}
?>
答案 0 :(得分:0)
您应该检查会话配置文件。
一个例子:
$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'] = "";
我在参加会议之前遇到了问题。
这些应该位于应用程序文件夹中的配置文件中&#34; /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工作正常,你实际上可以回显这些东西,并且仪表板不起作用(并创建一个新会话),我想出了所有想法,对不起好友