【问题标题】:session flash data not working in ajax会话闪存数据在 ajax 中不起作用
【发布时间】:2017-11-03 16:34:38
【问题描述】:

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

控制器方法

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 } ?>

现在闪存数据工作得很好,我在许多其他页面中使用它,但是当我将它与 ajax 一起使用时,它没有被设置!有什么帮助吗?

【问题讨论】:

  • Flash 数据在您重定向之前无法使用。在 AJAX 中没有办法
  • 那么我们如何实现一个特定的场景呢?

标签: php ajax codeigniter session


【解决方案1】:

我从 codeigniter 文档中得到的关于 flashdata 的信息:

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

根据以上描述,您的 change_password_credentials_error 会话将在“用户/注销”控制器上可用,并在控制器处理后清除。因此,现在重定向到登录页面后,flashdata 会话将不可用。

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

【讨论】:

  • 我喜欢这个想法,但假设我有这种情况!所以这意味着无法通过 ajax 设置 flash 数据?
猜你喜欢
  • 2018-08-03
  • 2016-08-25
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多