【问题标题】:codeigniter session lost when refresh (F5)刷新时codeigniter会话丢失(F5)
【发布时间】:2013-12-10 02:33:17
【问题描述】:

首先,我是 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');
    }

}

?>

验证登录

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>

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

【问题讨论】:

  • 为什么您认为会话丢失了?你检查过它丢失了吗?
  • 是的,我已经检查了 print_r($this->session->userdata('logged_in'));处于最佳状态。第一个出现,但当我刷新它是空白的
  • 您也可以发布您的配置文件吗?
  • $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_expire_on_close'] = 假; $config['sess_encrypt_cookie'] = 假; $config['sess_use_database'] = 假; $config['sess_table_name'] = 'ci_sessions'; $config['sess_match_ip'] = 假; $config['sess_match_useragent'] = TRUE; $config['sess_time_to_update'] = 300;

标签: php codeigniter session redirect


【解决方案1】:

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

如果不能选择基于数据库的会话,请告诉我。

请参阅此处了解更多信息:CodeIgniter Sessions 请参阅标题“将会话数据保存到数据库”

【讨论】:

  • 同意,数据库会话是可行的方法
  • 重复会话可能存在问题。您之前的会话可能未正确销毁,并在尝试更新当前会话时导致冲突。其他浏览器也会出现这个问题吗?
  • 我在 CI 会话中遇到过类似的问题,我发现 github.com/EllisLab/CodeIgniter/wiki/OB-Session 效果很好。
【解决方案2】:

如果您使用的是 Windows,那么 Windows 10 上的 Codeigniter、PHP 7 和 Apache 会出现问题。我有一个客户希望在自己的笔记本电脑上使用暂存应用程序,而这只发生在他们的新笔记本电脑上。

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

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

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 2015-04-20
    • 2023-03-25
    • 2019-09-04
    • 2014-12-31
    • 1970-01-01
    • 2023-03-27
    • 2019-08-13
    相关资源
    最近更新 更多