[英]CodeIgniter - Session not working when redirecting to other Controller
从一个控制器重定向到另一个控制器时,会话不起作用。 在下面的示例中,我只是尝试检查登录,如果用户有效,则从名为“登录”的控制器将用户名设置为会话,并重定向到另一个控制器“测试”并打印会话值。 但是,当用户被验证时,会话工作正常,直到我们进入登录控制器(我通过放置print_r($this->session->userdata('username'));
通过删除重定向方法进行检查),当我重定向时,重定向的控制器中的会话值显示为空。
这是我的代码示例:
控制器:Login.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('M_login');
$this->load->helper('url');
$this->load->library('session');
$this->load->helper('form');
}
public function index()
{
$u=$this->session->userdata('username');
if($u) {
redirect('Testing');
} else {
$this->load->view('login');
}
}
public function login_form()
{
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_error_delimiters('<span class="error">', '</span>');
if($this->form_validation->run()==FALSE)
{
$this->load->view('login');
}
else{
$result = $this->M_login->takeUser();
if(count($result)>0)
{
$user = $this->input->post('username', TRUE);
$this->session->set_userdata('username', $username);
redirect('Testing');
}
else{
?>
<script>
alert('Failed Login: Check your username and password!');
history.go(-1);
</script>
<?php
}
}
}
public function logout()
{
$this->session->sess_destroy();
redirect('login/login_form');
}
}
型号:M_login.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class M_login extends CI_Model
{
public function __construct()
{
parent::__construct();
}
public function takeUser()
{
$username = $this->input->post('username');
$password1 = $this->input->post('password');
$password = md5($password1);
$this->db->select('username');
$this->db->from('employee');
$this->db->where('username', $username);
$this->db->where('password', $password);
$result = $this->db->get();
return $result->row_array();
}
}
控制器:Testing.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Testing extends CI_Controller
{
public function __construct(){
parent::__construct();
$this->load->library('session');
}
public function index() {
print_r($this->session->userdata('username'));
}
}
我也有自动加载会话:
$autoload['libraries'] = array('database','session','form_validation', 'pagination', 'user_agent','encryption');
问题可能出在 Login.php 的这些代码行中
$user = $this->input->post('username', TRUE);
$this->session->set_userdata('username', $username);
请注意,变量$user
设置为$_POST['username']
,但$username
内容存储在会话中。
尝试这个
$user = $this->input->post('username', TRUE);
$this->session->set_userdata('username', $user);
变量 $username 未在 login_form() 函数中定义只需更改
$username = $this->input->post('username', TRUE);
$this->session->set_userdata('username', $username);
或者干脆用一行
if(count($result)>0)
{
$this->session->set_userdata('username', $this->input->post('username'));
redirect('Testing');
}
它正在工作,我检查过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.