0

ログインを試みる前に表示していたページにユーザーをリダイレクトしようとしています。たとえば、baseurl/people/abraham_lincoln を見てログインしようとすると、ログイン後に baseurl/people/abraham_lincoln にリダイレクトされます。奇妙なことは、一部の URL では機能し、他の URL では機能しないことです。一部の URL では、以前の URL ではなく、URL として「javascript/jsFunctions.js」が追加されています。

すべてのコントローラーの上部で、リダイレクトを行うためのセッション変数を設定します。

$this->session->set_userdata('Redirect', current_url());

テスト目的で、このセッション変数をコントローラーの上部とログインビューの上部に出力しています。ログインに行ったときに受け取ったいくつかの結果を次に示します。

機能している URL の例:

ログインしようとしている URL:

baseURL/people

Redirect セッション変数としてコントローラーの上部に出力されるもの:

baseURL/people

ログイン ビューの上部に Redirect セッション変数として出力されるもの:

baseURL/people

機能しない URL の例:

ログインしようとしている URL:

baseURL/people/abraham_lincoln

Redirect セッション変数としてコントローラーの上部に出力されるもの:

baseURL/people/abraham_lincoln

ログイン ビューの上部に Redirect セッション変数として出力されるもの:

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)....

探している URL ではなく、これらの JavaScript 変数を取得している理由を誰かが考えられる場合は、入力していただければ幸いです。

ありがとう!

PS、たとえば abraham_lincoln ページなど、機能していないページを更新してからログインすると、正しい Redirect セッション変数が表示されることを忘れていました。最初は正しく設定されていないようですが、ビューが読み込まれる直前と一番上でセッション変数を設定しようとしたため、これを解決する方法がわかりません。

4

1 に答える 1

0

ユース ケースは、ログイン プロセスにのみ適用する必要があります。したがって、これをすべてのコントローラーの一番上に置くことは、おそらく私たちが望むものではありません。

セッションの最初に current_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.
?>
于 2012-07-25T15:33:28.023 に答える