Php 在登录页面上更改Codeigniter重定向

Php 在登录页面上更改Codeigniter重定向,php,codeigniter,redirect,Php,Codeigniter,Redirect,我正在尝试将用户重定向到他们在尝试登录之前查看的页面。例如,如果他们正在查看baseurl/people/abraham_-lincoln,然后决定登录,登录后他们将被重定向到baseurl/people/abraham_-lincoln。奇怪的是,它只适用于某些URL,而不适用于其他URL。对于一些URL,我会将“javascript/jsFunctions.js”附加为URL,而不是之前的URL 在每个控制器的顶部,我设置了一个会话变量来执行重定向: $this->session-&g

我正在尝试将用户重定向到他们在尝试登录之前查看的页面。例如,如果他们正在查看baseurl/people/abraham_-lincoln,然后决定登录,登录后他们将被重定向到baseurl/people/abraham_-lincoln。奇怪的是,它只适用于某些URL,而不适用于其他URL。对于一些URL,我会将“javascript/jsFunctions.js”附加为URL,而不是之前的URL

在每个控制器的顶部,我设置了一个会话变量来执行重定向:

$this->session->set_userdata('Redirect', current_url());
出于测试目的,我正在将此会话变量打印到控制器顶部和登录视图顶部。以下是我登录时收到的一些结果

正在运行的URL示例:

我尝试从以下URL登录:

baseURL/people
baseURL/people/abraham_lincoln
在控制器顶部打印的内容作为重定向会话变量:

baseURL/people
baseURL/people
baseURL/people/abraham_lincoln
baseURL/people/javascript/jsFunctions.js
在我的登录视图顶部打印的内容作为我的重定向会话变量:

baseURL/people
baseURL/people
baseURL/people/abraham_lincoln
baseURL/people/javascript/jsFunctions.js
不起作用的URL示例:

我尝试从以下URL登录:

baseURL/people
baseURL/people/abraham_lincoln
在控制器顶部打印的内容作为重定向会话变量:

baseURL/people
baseURL/people
baseURL/people/abraham_lincoln
baseURL/people/javascript/jsFunctions.js
在我的登录视图顶部打印的内容作为我的重定向会话变量:

baseURL/people
baseURL/people
baseURL/people/abraham_lincoln
baseURL/people/javascript/jsFunctions.js
我不确定这是否重要,但我也在路由routes.php文件中的一些URL:

$route['people/(:any)'] = "people/index/$1";
$route['people/(:any)/(:num)'] = "people/index/$1/$2";
我尝试了多种不同的方式构建会话变量,包括:

current_url()
base_url().uri_string()
base_url().$this->uri->segment(1)....
base_url().$this->uri->rsegment(1)....
如果有人能想到为什么我会得到这些javascript变量,而不是我正在寻找的URL,我将非常感谢任何输入

谢谢


另外,我忘了提到,如果我刷新一个不工作的页面,例如abraham_lincoln页面,然后进入login,我会收到正确的重定向会话变量。几乎就像第一次没有正确设置一样,但我不知道如何解决这个问题,因为我已经尝试在视图加载之前在顶部和右侧设置会话变量。

用例应该只应用于登录过程。因此,把它放在每个控制器的顶部可能不是我们想要的

您应该将当前url附加到登录链接,而不是在开始时将其放入会话中

<?php echo anchor('/home/login/' . url_encode(current_url()), 'login');?>

在登录功能中

<?php
    public function login($redirecturl) {
        $this->form_validation->set_rules('username', 'Username', 'required');
        // etc.
        if($this->form_validation->run()) {
            $query = "select id from users where username=? and password=sha(?)";
            // etc.
            $this->session->set_userdata('userid', $row->id);
            redirect($redirecturl);
        } else {
            $data['redirecturl']=$redirecturl;
            $data['content']='loginview';
            $this->load->view('template', $data);
        }
    }
?>

在登录视图中

<?php
    echo form_open('/home/login/' . url_encode($redirecturl));
    // etc.
?>

感谢您的回复。即使将javascript.js文件附加到视图中的url,我仍然会将其附加到当前的_url()中。不知道为什么。目前,我有一个使用$\u服务器['HTTP\u REFERER']的解决方案,目前似乎正在运行。我知道它不是100%可靠,但目前正在工作。再次感谢您的回复。