【问题标题】:codeigniter session is not working on other methods of the same controllercodeigniter 会话不适用于同一控制器的其他方法
【发布时间】:2017-05-08 22:50:15
【问题描述】:

我已经使用验证码制作了登录控制器,并使用回调规则来检查和验证验证码输入。

所以,我尝试使用会话将验证码变量发送到同一控制器中的另一个方法。

当我在另一个函数中回显会话时,它不起作用。只有当我尝试在同一个函数中回显它时它才有效。

代码如下:

1.登录功能

public function login()
{
    if($this->auth->is_logged_in() === TRUE)
    {
        redirect(base_url()."dashboard");
    }

    $username = $this->input->post('username');
    $password = $this->input->post('password');

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

    if($this->form_validation->run() == FALSE)
    {
        $cap                = $this->created_captcha();
        $data['cap_img']    = $cap['image'];
        $data['title']      = 'Form Login Administrator';

        $this->session->set_userdata('captcha', $cap['word']);
        $sess = $this->session->userdata('captcha');

        echo ' <br/> FIRST SESSION : '.$sess . ' --- ';

        $this->load->view('form-login', $data);

    }
    else
    {
        $check_login = $this->auth->do_login($username,$password);

        if($check_login == FALSE)
        {
            $this->session->set_flashdata('msg', 'Your username or password wrong, please repeat again !!!');
            redirect(base_url().'login');
        }
        else
        {
            $lastlogin = $this->dbm->update('users', array('userid'=>$this->session->userdata('userid')), array('lastlogin'=>date('Y-m-d H:i:s')) );

            $this->session->unset_userdata('captcha');

            redirect(base_url().'dashboard');   

        }
    }
}

2。检查 capthca 函数

public function check_captcha($input)
{
    echo '<br/> SECOND SESSION : '. $this->session->userdata('captcha') . ' --- ' .
         '<br/> POST INPUT : '.$input.' --- ';  

    if($input === $this->session->userdata('captcha')) 
    {

        return TRUE;
    }
    else
    {
        $this->form_validation->set_message('check_captcha', 'you input the wrong %s!'); 

        return FALSE;
    }
}

我已经尝试将会话库放入构造函数中,但还是一样。

function __construct()
{
    parent::__construct();
    $this->load->library('session');
    $this->userid = $this->session->userdata('userid');
    $this->load->helper('captcha');
}

我在这里犯错了吗?请帮忙,谢谢。

编辑: 这只发生在 chrome 浏览器中。

【问题讨论】:

  • 你在哪里加载form_validation库?
  • 它加载到了config目录下的autoload.php中。

标签: php codeigniter session


【解决方案1】:

您没有在check_captcha 方法中获得验证码会话,因为您的验证码会话仅在表单未验证时创建。

if($this-&gt;form_validation-&gt;run() == FALSE)..前面加上下面几行代码

    $cap                = $this->created_captcha();
    $data['cap_img']    = $cap['image'];
    $data['title']      = 'Form Login Administrator';

    $this->session->set_userdata('captcha', $cap['word']);

【讨论】:

  • 它不起作用,这个会话问题只有在我使用 chrome 时才会发生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 2020-05-24
  • 1970-01-01
  • 2018-03-25
  • 2021-12-01
  • 2016-09-26
  • 2021-03-10
相关资源
最近更新 更多