我现在正在使用codeigniter进行会话,而且我不确定它出错的地方。 我只设法阅读第一页的会话。当我浏览到其他页面时,会话消失了。 以下是仪表板的var_dump。
array(2) {
["__ci_last_regenerate"]=>
int(1487063353)
["logged_in"]=>
array(2) {
["userName"]=>
string(5) "julie"
["userRole"]=>
string(1) "1"
}}
以下是第二页的var_dump以及当我返回仪表板时
array(1) {
["__ci_last_regenerate"]=>
int(1487063602)
}
以下是我的代码。感谢您是否可以帮助我指出问题和解决方案。提前谢谢。
配置/ config.php中
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 1800; // 30 minutes
$config['sess_save_path'] = BASEPATH .'/sessions/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
库/ SimpleLoginSecure.php
function login($user_name,$user_pass)
{
$this->CI =& get_instance();
// verification code goes here
//set session data
$user_data = $query->row_array();
$dataSession['userName'] = $user_data['userName'];
$dataSession['userRole'] = $user_data['userRole'];
$this->CI->session->set_userdata('logged_in',$dataSession);
return TRUE;
}
控制器/ login.php中
function __construct() {
parent::__construct();
}
public function index() {
$this->load->helper('form');
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<p class="text-red">', '</p>');
$this->form_validation->set_rules('userName', 'Username', 'trim|required|xss_clean');
$this->form_validation->set_rules('userPass', 'Password', 'trim|required|xss_clean|callback_check_database');
if ($this->form_validation->run() == false) {
$this->load->view('index');
}
}
function verify_user()
{
$this->load->library('form_validation');
$this->load->library('SimpleLoginSecure');
$hasher = new PasswordHash(8, false);
$userpass = $this->input->post('inputPassword');
$username = $this->input->post('inputName');
$results = $this->simpleloginsecure->login($username,$userpass);
if($results != FALSE) {
$SESS_data = $this->session->userdata('logged_in');
$data['SESS_username'] = $SESS_data['userName'];
$data['SESS_userrole'] = $SESS_data['userRole'];
var_dump($this->session->all_userdata());
$this->load->view('dashboard', $data);
}
else {
$attempt = $this->simpleloginsecure->updatePassAttempt($userName);
if ($attempt != FALSE) {
echo '<script>alert("Invalid Username or password"); window.history.back();</script>';
}
}
}
function logout() {
$this->load->library('SimpleLoginSecure');
// Logout
$this->simpleloginsecure->logout();
echo '<script>alert("Successfully Logout"); </script>';
redirect(base_url());
}
答案 0 :(得分:0)
确保你实际上正在加载会话库,这是最安全的赌注,如果它将在95-100%的时间内使用的东西坚持自动加载。
库数组中的 application/config/autoload.php
添加'session',这将确保在初始化时它将始终被加载。它的第60行:
$autoload['libraries'] = array('session');
发生此类事情的最常见问题是在您需要时没有加载库。
我还建议使用完整的控制器和模型进行帐户管理而不是库或帮助程序,这使得您在标准CI范围内的生活变得更加轻松。