【问题标题】:Session on codeigniter not working perfectlycodeigniter 上的会话无法正常工作
【发布时间】:2018-03-05 08:10:19
【问题描述】:

我对我的代码中的会话(用户数据/闪存数据)有疑问。

模态

  public function loginCheck(){

    $email = $this->input->post('email');

    //encrypt password
    $this->load->library("hashing");
    $password = $this->hashing->incrypt($this->input->post('password'));    

    $this->params = array('email' => $email, 'password' => $password);


    $user = $this->findById();


    if(count($user)>0){
        $data = array(
            'email' => $user->email,
            'isLoggedIn' => 1,
            'user_id' => $user->id,
            'user_type' => $user->user_type
        );

        $this->session->set_userdata($data);
        return true;
    }
    return false;

}

还有我的控制器

public function login(){

    $this->load->model('model_users');

    //if posted login 
    $submit = $this->input->post('submit');

    if($submit){

        $this->load->model('model_users');

        $rules = $this->model_users->rules;
        $this->form_validation->set_rules($rules);

        if($this->form_validation->run() == true){

            // user credential from model
            if($this->model_users->loginCheck()== true){
                redirect("admin/site/index");
            } else{
                 $this->session->set_flashdata('message', 'Oops! Invalid email and/ or password.');
                 redirect("admin/site/login");
            }
        }else{
                $this->session->set_flashdata('message', 'Oops! Invalid email and/ or password.');
                redirect("admin/site/login");
        }

    }

     $this->loadPartialView("admin/login");
}

会话未在 CI 3.0 上设置。 set_userdata() 函数运行不正常。

手动会话初始化也有问题。

【问题讨论】:

  • 会话库是从自动加载中加载的
  • 解释深入到底发生了什么以及您采取了哪些调试步骤。这将帮助我们缩小问题的范围。 “运行不佳”和“遇到麻烦”并不是真正可以解决的确定性问题。
  • 谢谢,我正在使用 set_userdata 函数为我的系统设置会话。但是,它不保存会话。我需要在其他地方管理吗?
  • 只要你已经自动加载它 - 应该没问题。确保是这种情况。为了安全起见,可以将其加载到您的控制器/模型构造函数中(您可以稍后将其删除),以查看这是否可能是问题所在。您需要验证内部是否达到了if(count($user)>0){。里面加个回声什么的看看。尝试一堆类似的调试东西。
  • 当一切都失败了。创建一个测试控制器,设置一个会话变量并在 echo 之后。重新加载页面,如果不存在,则说明您遇到了会话问题。检查以确保配置中的 sess_save 路径正确...(必须设置)

标签: php codeigniter


【解决方案1】:

请在使用前尝试将 Session Library 加载到 Controller 和 Modal 中。

$this->load->library('session');

【讨论】:

  • $this->load->library('session');没有工作。在自动加载之前和加载时有什么区别?
  • 真的没有区别。
【解决方案2】:

我认为这不是一个好的答案,但是您是否在view 中致电您的会议? 据我所知,

CodeIgniter 支持“flashdata”,即仅可用于下一个服务器请求的会话数据,然后自动清除。

可以在sesseion documentation找到

所以在你看来div标签或其他,就像

<?php echo $this->session->flashdata('message');?>

【讨论】:

    【解决方案3】:

    首先你可以添加会话库。

    添加库有两种方式。

    1) 您可以添加控制器方法。

    2) 在 autoload.php 文件中自动加载。

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多