17

私のプロジェクトのメッセージングシステムでは、ユーザーからメッセージを受け取ったときに、別のユーザーがメッセージを表示するためにメッセージを送信したことを示す電子メールアラートが表示されます ここをクリック (つまり、メッセージの 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 部分を取得できないことです。

なにか提案を ?

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

4

5 に答える 5

42

これは次のことに役立ちます。

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

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

以下のソリューションは、Codeigniter バージョン 3 用です。

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

更新: 同じ user_agent ライブラリでリファラー情報を取得する方法に関する興味深い有用な情報
https://www.tutorialandexample.com/user-agent-class/

于 2013-04-13T18:15:53.497 に答える
19

ちょうどどうですか

redirect($_SERVER['HTTP_REFERER']);

php の$_SERVERグローバル変数を使用します。

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

于 2014-04-10T11:40:32.670 に答える
3

URL にクエスチョン マークが 2 つあるため、ブラウザは 2 つ目以降の URL 部分を無視します。次のように、リダイレクト部分にurlencodeを使用します。

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

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

于 2013-04-26T07:45:01.327 に答える