web-dev-qa-db-ja.com

codeigniterのリファラーURLにリダイレクトします

私のプロジェクトのメッセージングシステムでは、ユーザーからメッセージを受け取ると、他のユーザーがメッセージを表示するためにメッセージを送信したことを知らせるメールアラートが表示されます(例:メッセージのURL)ログインページにリダイレクトされ、ログイン後にリファラーURLに戻る必要があります。コアフォルダーにbasecontollerを作成し、CI_controllerを拡張して、認証コードを次のようにしました。

function authenticate($type = 'user')
    {
        if($type == 'user')
        {
            if($this->user_id)
            {
                // user is logged in. check for permissions now
            }
            else
            {
                // user isnt logged in. store the referrer URL in a var.
                if(isset($_SERVER['HTTP_REFERER']))
                {
                    $redirect_to = str_replace(base_url(),'',$_SERVER['HTTP_REFERER']);
                }
                else
                {
                    $redirect_to = $this->uri->uri_string();
                }            

                redirect('user/login?redirect='.$redirect_to);
                exit;
            }
        }

        if($type == 'admin')
        {
            if($this->session->userdata('admin_id') && $this->session->userdata('user_type') ==5)
            {
                // Admin is logged in
            }
            else
            {
                redirect('admin/login');
                exit;
            }
        }
    }

リファラーURLは "http://example.com/project/pm/view_conversation?id=11"になりましたが、問題はview_conversationまでリファラーURLを取得しており、ID部分を取得できないことです。

なにか提案を ?

ありがとうございました。

15

これは役立ちます:

CI 2+ https://www.codeigniter.com/userguide2/libraries/user_agent.html

CI 3+ http://www.codeigniter.com/user_guide/libraries/user_agent.html

$this->load->library('user_agent');
if ($this->agent->is_referral())
{
    echo $this->agent->referrer();
}
36
Adrian P.

どうですか

redirect($_SERVER['HTTP_REFERER']);

Phpの $_SERVER グローバル変数。

これは私のために働いた!

16
maxxon15

ログインコントローラーにそのコードを入力

function index() {
    $this->load->library('user_agent');  // load user agent library

    //Set session for the referrer url
    $this->session->set_userdata('referrer_url', $this->agent->referrer() );  
}

ログインリダイレクトコード後

// user is authenticated if referrer is there
if( $this->session->userdata('referrer_url') ) {
    //Store in a variable so that can unset the session
    $redirect_back = $this->session->userdata('referrer_url');
    $this->session->unset_userdata('referrer_url');
    redirect( $redirect_back );
}
4
Binayak Das

URLに二重疑問符があるため、ブラウザは2番目のURL部分の後のURL部分を無視します。 rlencode を使用して、次のようにパートをリダイレクトします。

redirect('user/login?redirect='.urlencode($redirect_to));

私はそれをテストしましたが、このように機能します。

2
machineaddict

デフォルトでは、CIはURLのクエリ部分(「?」の後の部分)を無視するように構成されています。

参照: http://codeigniter.com/user_guide/general/urls.html

1
Patrick Savalle