【问题标题】:codeigniter session with ajax input is not working带有 ajax 输入的 codeigniter 会话不起作用
【发布时间】:2018-01-16 14:38:56
【问题描述】:

查看

        <input type="text" class="form-control" placeholder="Username" name="username" id="username">

        <input type="password" class="form-control" placeholder="Password" name="password" id="password">

          <button type="button" class="btn btn-primary btn-block btn-flat"  id="login">Sign In</button>

这里我使用 ajax 将值传递给控制器​​

<script>
  $(function()
  {
    $('#login').click(function()
    {
      var username=$("#username").val();
      var password=$("#password").val();
      $.ajax({
      url:"<?php echo base_url();?>home/check_login",
      type:"POST",
      async:false,
      data:{username:username,password:password},
      success:function(data)
       {
        var obj = JSON.parse(data);
        var count = Object.keys(obj).length;
        console.log(obj);
        console.log(count);
           if(obj.length==1)
           {
          window.location.href = "<?php echo base_url();?>home/show_dashboard";
           }
           else if(obj.length==0)
           {    
             $('#modal_warning').modal('show');
           } 
        }
     });
   });
});
</script>

我的控制器是

public function check_login()
    {
        $username= $this->input->post('username');
        $password= $this->input->post('password');

        $newdata = array(
               'username'  => $username,


           );


        $this->session->set_userdata('ci_session',$newdata);

        $details=$this->user_model->check_username($username,$password);
        echo json_encode($details);
    }

点击退出按钮时

public function log_out()
    {   
        if($this->session->unset_userdata('ci_session'))
        {
        $this->load->view('login');
        }
        else
        {
            echo "nooo";
            exit;
        }
    }

当我单击注销按钮时,它给了我“noo”,我将它放在其他部分。 当我尝试打印会话数据时,它什么也没打印。如何设置会话通过 ajax 传递哪些数据。

我还加载了会话库

【问题讨论】:

    标签: ajax codeigniter session


    【解决方案1】:

    你正在做$this-&gt;set_userdata('ci_session',$newdata); 没有会话。像这样设置会话变量。 $this-&gt;session-&gt;set_userdata('ci_session',$newdata);

    还要确保会话驱动程序已加载。要访问会话变量,您可以执行 print_r($this-&gt;session-&gt;ci_session)

    进一步:

    未设置的用户数据实际上不会返回任何内容:

    /**
     * Unset userdata
     *
     * Legacy CI_Session compatibility method
     *
     * @param   mixed   $key    Session data key(s)
     * @return  void
     */
    public function unset_userdata($key)
    {
        if (is_array($key))
        {
            foreach ($key as $k)
            {
                unset($_SESSION[$k]);
            }
    
            return;
        }
    
        unset($_SESSION[$key]);
    }
    

    因此它总是评估为假。该函数本身只是unset($_SESSION[$key]) 的别名,您可以在会话核心文件中查看该函数。不需要条件语句; $this-&gt;session-&gt;unset_userdata('ci_session'); redirect(...); 就足够了。

    【讨论】:

    • 感谢您的回复,但它不工作,它仍然去else部分
    • 公共函数 log_out() { print_r($this->session->ci_session);出口; $this->session->unset_userdata('ci_session'); if($this->session->unset_userdata('ci_session')) { redirect('home/index'); } else { print_r($this->session->ci_session);出口; } }这成功给了我会话数据,但我无法取消设置会话数据
    • 公共函数 log_out() { $this->session->unset_userdata('ci_session'); print_r($this->session->unset_userdata('ci_session')); exit;} 当我打印这个时,没有任何打印,所以我认为会话已成功取消。但是当我点击浏览器后退箭头时,它会将我带到上一页
    • 为什么不呢?这就是后退按钮的作用...单击按钮后刷新页面并查看您是否仍然登录。如果是,那么我认为其他地方的逻辑有问题;人们通常有类似if (!isset($this-&gt;session-&gt;user_id)) { redirect('/login'); } 之类的东西来保护身份验证控制器(我假设你也这样做,否则你真的应该做一些研究)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多