web-dev-qa-db-fra.com

Rediriger vers l'URL du référent dans codeigniter

Dans le système de messagerie de mon projet, lorsque vous recevez un message d'un utilisateur, vous recevez une alerte par courrier électronique indiquant qu'un autre utilisateur a envoyé un message pour afficher le message. Cliquez ici (c.-à-d. L'URL du message). Si l'utilisateur n'est pas connecté au système il est redirigé vers la page de connexion et, une fois connecté, il devrait revenir à l'URL du référent. J'ai créé un contrôleur de base dans le dossier principal et l'extension du code d'authentification de CI_controller est la suivante.

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;
            }
        }
    }

L'URL du référent est "http://example.com/project/pm/view_conversation?id=11"now. Le problème est que je suis en train d'obtenir l'URL du référent jusqu'à view_conversation et que je ne parviens pas à obtenir la partie id.

Toute suggestion ?

Je vous remercie.

13
Prathamesh mhatre

Cela peut aider:

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();
}
33
Adrian P.

Que diriez-vous juste

redirect($_SERVER['HTTP_REFERER']);

Utilisation de la variable $_SERVER global de php.

Cela a fonctionné pour moi!

16
maxxon15

Mettez ce code dans votre contrôleur de connexion

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() );  
}

Après le code de redirection de connexion

// 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

Comme vous avez un double point d'interrogation dans l'URL, le navigateur ignore la partie de l'URL après la seconde. Utilisez urlencode pour vous rediriger une partie, comme ceci:

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

Je l'ai testé et ça marche comme ça.

2
machineaddict

Par défaut, CI est configuré pour ignorer la partie requête de l'URL (la partie après le '?').

Voir: http://codeigniter.com/user_guide/general/urls.html

1
Patrick Savalle