会话闪存数据无法在ajax中运行

时间:2017-11-03 16:34:39

标签: php ajax codeigniter session

我的管理员现在在更改密码之前有一个更改密码功能我正在通过要求用户再次输入用户名密码进行验证,如果用户密码不正确我正在做的是设置Flash数据并将用户注销。所以当他来到主登录面板时,他现在应该看到错误是我的代码

控制器方法

public function checkpassword(){
        $this->check_unique_id_from_db_for_secuity();
        $unique_id=base64_decode($this->uri->segment(3));
        $data = $this->input->post();
        $data['unique_id']=$unique_id;
        $status=$this->User_model->validate_user_loged_in_for_change_password($data);
        if($status){
            echo "true";
            exit();
        }
        else
        {
            $this->session->set_flashdata('change_password_credentials_error',"Your Username/Password was incorect account was logged out for secutiry reasons!");
            echo "false";
            exit();
        }
    }

ajax请求

$.ajax({
            type: 'post',
            url: '<?php echo base_url()."User/checkpassword/".$this->uri->segment(3).""; ?>',
            data:{ "login_username" : $("#login_username").val(), "login_password" : $("#login_password").val() },
            success: function (data) {
                if(data=="true"){
                    window.location.href="<?php echo base_url()."User/changepassword_view/".$this->uri->segment(3)."";?>";
                }
                else
                {
                    window.location.href="<?php echo base_url()."User/logout";?>";
                }
            }

        });

主登录页面上的php脚本

<?php
    if($this->session->flashdata('change_password_credentials_error')){?>
        <script>toastr["success"]("<?php echo $this->session->flashdata('change_password_credentials_error')?>");</script>
    <?php } ?>

现在flash数据正常工作我在许多其他页面中使用它但是当我使用它与ajax不知何故它没有被设置!有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

我从codeigniter doc获得的flashdata:

  

CodeIgniter支持“flashdata”或仅适用于下一个请求的会话数据,然后自动清除。

从上面的说明中, change_password_credentials_error 会话会在&#34; User / Logout&#34;控制器并在控制器处理后清除。因此,现在在重定向到登录页面之后,flashdata会话将无法使用。

对于这种情况,只需在 $ status 变量(else)检查后清除登录会话,然后直接将用户移动/重定向到主登录页面。