Php 重定向到codeigniter中的另一个视图后会话到期
我对codeigniter还很陌生。这是我的第一个项目,我正在建设一个项目,我卡在我的登录注册模块。注册功能工作正常,登录后,我的目标是将用户重定向到管理页面,在那里他/她可以看到他的详细信息。但现在的问题是在检查登录凭据并使用此代码设置用户会话之后Php 重定向到codeigniter中的另一个视图后会话到期,php,codeigniter,session,codeigniter-3,Php,Codeigniter,Session,Codeigniter 3,我对codeigniter还很陌生。这是我的第一个项目,我正在建设一个项目,我卡在我的登录注册模块。注册功能工作正常,登录后,我的目标是将用户重定向到管理页面,在那里他/她可以看到他的详细信息。但现在的问题是在检查登录凭据并使用此代码设置用户会话之后 $session_data = array( 'username' => $result[0]->user_name, 'email' => $result[0]-&
$session_data = array(
'username' => $result[0]->user_name,
'email' => $result[0]->user_email,
);
$this->session->set_userdata('loggedin', $session_data);
redirect('logincontroller/admin_dashboard');
但我的会话没有设置。当我在我的管理仪表板视图中转储$this->session->userdata['loggedin']
时,它返回空值或不显示任何内容
这是我的登录控制器的代码
<?php
class Logincontroller extends CI_Controller
{
public $outputData = array();
public $loggedInUser;
public function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->load->library('form_validation');
$this->load->library('session');
$this->load->model('login_database');
$this->load->helper('url');
$this->load->database();
}
public function index()
{
$this->outputData['pagetitle'] = "Login Form";
$this->load->view('login_form', $this->outputData);
}
public function registrationform()
{
$this->outputData['pagetitle'] = "Registration Form";
$this->load->view('registration_form', $this->outputData);
}
public function user_registration_process()
{
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('email_value', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
$this->outputData['pagetitle'] = "Registration Form";
$this->load->view('registration_form', $this->outputData);
}
else
{
$data = array(
'user_name' => $this->input->post('username'),
'user_email' => $this->input->post('email_value'),
'user_password' => $this->input->post('password')
);
$result = $this->login_database->registration_insert($data);
if ($result == TRUE)
{
$this->outputData['pagetitle'] = "Login Form";
$this->outputData['message_display'] = 'Registration Successfully !';
$this->load->view('login_form', $this->outputData);
}
else
{
$this->outputData['message_display'] = 'Username already exist!';
$this->outputData['pagetitle'] = "User Registration";
$this->load->view('registration_form', $this->outputData);
}
}
}
public function login_process()
{
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
if(isset($this->session->userdata['loggedin']))
{
redirect('logincontroller/admin_dashboard');
}
else
{
$this->outputData['pagetitle'] = "Login Form";
$this->load->view('login_form', $this->outputData);
}
}
else
{
$data = array(
'username' => $this->input->post('username'),
'password' => $this->input->post('password')
);
$result = $this->login_database->login($data);
if ($result == TRUE)
{
$username = $this->input->post('username');
$result = $this->login_database->read_user_information($username);
if ($result != false) {
$session_data = array(
'username' => $result[0]->user_name,
'email' => $result[0]->user_email,
);
$this->session->set_userdata('loggedin', $session_data);
redirect('logincontroller/admin_dashboard');
}
}
else
{
$this->outputData['pagetitle'] = "Login Form";
$this->outputData['error_message'] = "Invalid Username or Password";
$this->load->view('login_form', $this->outputData);
}
}
}
public function admin_dashboard()
{
$this->outputData['pagetitle'] = "Admin Dashboard";
$this->load->view('admin_page', $this->outputData);
}
public function logout()
{
$sess_array = array(
'username' => ''
);
$this->session->unset_userdata('loggedin', $sess_array);
$this->outputData['pagetitle'] = "Login Form";
$this->outputData['message_display'] = 'Successfully Logout';
$this->load->view('login_form', $this->outputData);
}
}
我在支持mysql的服务器上使用codeigniter 3.0.6,请参见。在这份文件中说;使用此代码的另一个变量集会话:
<?php class Logincontroller extends CI_Controller
{
public $outputData = array();
public $loggedInUser;
public function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->load->library('form_validation');
$this->load->library('session');
$this->load->model('login_database');
$this->load->helper('url');
$this->load->database();
}
public function index()
{
$this->outputData['pagetitle'] = "Login Form";
$this->load->view('login_form', $this->outputData);
}
public function registrationform()
{
$this->outputData['pagetitle'] = "Registration Form";
$this->load->view('registration_form', $this->outputData);
}
public function user_registration_process()
{
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('email_value', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
$this->outputData['pagetitle'] = "Registration Form";
$this->load->view('registration_form', $this->outputData);
}
else
{
$data = array(
'user_name' => $this->input->post('username'),
'user_email' => $this->input->post('email_value'),
'user_password' => $this->input->post('password')
);
$result = $this->login_database->registration_insert($data);
if ($result == TRUE)
{
$this->outputData['pagetitle'] = "Login Form";
$this->outputData['message_display'] = 'Registration Successfully !';
$this->load->view('login_form', $this->outputData);
}
else
{
$this->outputData['message_display'] = 'Username already exist!';
$this->outputData['pagetitle'] = "User Registration";
$this->load->view('registration_form', $this->outputData);
}
}
}
public function login_process()
{
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
if(isset($this->session->userdata['loggedin']))
{
redirect('logincontroller/admin_dashboard');
}
else
{
$this->outputData['pagetitle'] = "Login Form";
$this->load->view('login_form', $this->outputData);
}
}
else
{
$data = array(
'username' => $this->input->post('username'),
'password' => $this->input->post('password')
);
$result = $this->login_database->login($data);
if ($result == TRUE)
{
$username = $this->input->post('username');
$result = $this->login_database->read_user_information($username);
if ($result != false) {
$session_data = array(
'username' => $result[0]->user_name,
'email' => $result[0]->user_email,
);
$this->session->set_userdata('loggedin', $session_data);
redirect('logincontroller/admin_dashboard');
}
}
else
{
$this->outputData['pagetitle'] = "Login Form";
$this->outputData['error_message'] = "Invalid Username or Password";
$this->load->view('login_form', $this->outputData);
}
}
}
public function admin_dashboard()
{
if(!(isset($this->session->userdata['loggedin'])))
{
$this->outputData['pagetitle'] = "Login Form";
$this->load->view('login_form', $this->outputData);
}
$this->outputData['pagetitle'] = "Admin Dashboard";
$this->load->view('admin_page', $this->outputData);
}
public function logout()
{
$sess_array = array(
'username' => ''
);
$this->session->unset_userdata('loggedin', $sess_array);
$this->outputData['pagetitle'] = "Login Form";
$this->outputData['message_display'] = 'Successfully Logout';
$this->load->view('login_form', $this->outputData);
}
}
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
因此,您应该如下更改代码:
$this->session->set_userdata($session_data);
PHP7升级-*已知会话/COOKIE错误 这个答案解决了从PHP5升级到PHP7时已知的会话/cookie错误 如果您的CodeIgniter版本为@3.1.0或更低,并且您正在升级到PHP7.1,则需要更新CodeIgniter。 否则,将您的PHP7.1更改为5.6,它将正常工作 $this->session->set_userdata();-那可能很烦人。一旦您重定向或访问站点结构中的其他页面,它将覆盖您的会话 或者你可以这样做 如果您使用的是CI 3.x,并且刚刚将服务器php版本升级到PHP7.x
转到第281行的system/libraries/Session/Session.php并替换ini_set('Session.name',$params['cookie_name');按ini_集('session.id',$params['cookie_name']) 当我在我的登录过程函数中添加你的代码并运行页面并打印
print\r($This->session->userdata)时,此代码对我无效代码>然后我只会得到这个数组([\uu ci\u last\u regenerate]=>1490872665)
没有用户dataSorry@Shyamali你的代码对我没有帮助。我添加了它,但它不起作用
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
$this->session->set_userdata($session_data);