刷新时codeigniter会话丢失(F5)

时间:2013-12-10 02:33:18

标签: php codeigniter session redirect

首先,我是codeigniter的新手。我想问的是,为什么每次刷新我的会话数据都会丢失。我重定向登录。

这是我的代码。

登录控制器

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $this->load->helper('form');
        $this->load->view('login');
    }

}

?>

verifylogin

function index() {
  //This method will have the credentials validation
  $this->load->library('form_validation');

  $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
  $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

  if($this->form_validation->run() == FALSE) {
    //Field validation failed.  User redirected to login page
    //$this->load->view('headerx');
    //redirect('login', 'refresh'); 
    $this->load->view('login');
  }
  else {
    //Go to private area
    redirect('home');
  }

}

function check_database($password) {
  //Field validation succeeded.  Validate against database
  $username = $this->input->post('username');

  //query the database
  $result = $this->user->login($username, $password);

  if($result) {
    $sess_array = array();
    foreach($result as $row) {
      $sess_array = array(
        'id' => $row->id,
        'username' => $row->username
      );
      $this->session->set_userdata('logged_in', $sess_array);
    }
    return TRUE;
  }
  else {
    $this->form_validation->set_message('check_database', 'Invalid username or password');
    return false;
  }
}
?>

家庭控制器

function index()
{
  if($this->session->userdata('logged_in')) {
    $session_data = $this->session->userdata('logged_in');
    $data['username'] = $session_data['username'];
    $this->load->view('home', $data);
  }
  else {
    //If no session, redirect to login page
    // print_r($this->session->all_userdata()); 
    //die();
    redirect('login');
  }
}

首次登录成功,但是当我刷新(f5)时,它返回登录表单。 我的意见是因为会话丢失了。 谢谢你的帮助...

编辑并解决:

抱歉给您带来不便,出现此问题是因为

<script>
    function goOut(){
        <?php $this->session->unset_userdata('logged_in');?>   
        window.location="<?php echo base_url()?>";    
    }
</script>

我的目的是点击按钮注销,然后会话未设置,但如果我在标题中输入,会话将再次丢失,所以我会找到另一种方式。感谢您的关注和帮助。

2 个答案:

答案 0 :(得分:1)

我会尝试在数据库中使用CodeIgniter的会话。这个问题我过去曾经遇到CI问题。它通常发生在您在cookie中设置大量数据(大于4KB)时。

让我知道基于数据库的会话是不是一种选择。

有关详细信息,请参阅此处:CodeIgniter Sessions请参阅标题“将会话数据保存到数据库”

答案 1 :(得分:0)

如果你在Windows上,在Windows 10上存在Codeigniter,PHP 7和Apache的问题。我有一个客户端想要在他们自己的笔记本电脑上使用登台应用程序,而这只发生在他们的新笔记本电脑上。

因此,经过数小时的测试,我们卸载了XAMPP 7.1.4,并重新安装了版本为5.6.XX的XAMPP。并修复了它。然而,在运行Nginx和PHP 7的Linux机器上没有任何问题。只是Windows 10.

无论如何,我希望这会有所帮助!我花了几个小时才找到解决方案。