3

我有一个登录控制器,假设用户有效时重定向到我的索引页面。重定向有效,但在索引页面上,url 仍然是验证方法的 URL,例如:login/validate_login/。如果我单击索引页面上的链接,然后尝试返回浏览器历史记录,浏览器会将我指向验证方法而不是索引页面。

我该如何解决?

我曾尝试将重定向与刷新和位置一起使用,但都没有运气。

我怀疑这是 jQuery mobile 的 ajax 调用的问题,但我不确定。

任何帮助表示赞赏。亲切的问候

注意:我会在索引页面上发布 url 的图像,但我不允许这样做,因为我是新用户。

我的验证方法:

    function validate_login($controller='',$method='') {
    $this->load->library('form_validation');
    $this->load->model('workout_model');

    $this->form_validation->set_rules('ex_password','Koden','trim|required|min_length[4]|max_length[4]|callback_pw_check');


    if($this->form_validation->run() == FALSE) {
        $this->index();
    } else {
        if($query = $this->workout_model->validate()) {

            $data = array(
            'is_logged_in' => true,
            'user_id' => $query->id,
            'current_exercise' => '1'
            );

            $this->session->set_userdata($data);

            if($controller=='' || $method=='') {
                redirect("workout");
            } else {
                redirect($controller."/".$method);
            }
        } else {
            $this->index();
        }
    }
}
4

3 回答 3

1

要正确更新 URL,似乎需要两件事:使用 redirect(...) 而不是方法调用和禁用 jQuery Mobile ajax 调用。这样做的两种方法:添加和属性到最初指向您的方法的链接,

<a href='.../validate_login/...' data-ajax='false'>...</a>

或者,通过编辑设置(未测试)全局禁用 ajax 调用。

于 2013-05-05T01:03:28.017 回答
0

有两种方法可以处理这个问题,它与 AJAX 无关,它是 CI 做事的方式。最快最简单的方法是改变

$this->index();

redirect(index);

您这样做的方式实际上并没有重定向,而是在当前 URL 上调用 index 函数,即 validate_login。这样做的问题是,如果登录失败,它仍将保留在 validate_login URL 上以供下次尝试。

处理它的最佳方法是从控制器中的索引函数而不是表单本身调用实际的 validate_login 函数。因此,将表单发送回索引,让索引控制器检查表单数据,如果为真,则调用 validate_login()。这样你就不会真正离开索引页面,它只是处理登录表单是否已提交。解决网址问题。实际上,我对所有提交表单以进行任何类型验证的页面都是这样做的。

于 2012-10-13T04:06:19.360 回答
0

当您通过 HTML 表单提交时,例如登录注册。那么您还有某种仪表板重定向,您需要像这样更新您的表单标签。当我使用 Codeigniter 和 jquery mobile 使用data-ajax="false "

<form id="login-box" method="post" action="<?php echo base_url('index.php/auth/login_user'); ?> " data-ajax="false">
于 2019-12-19T21:18:09.777 回答