CodeIgniter Forums

Full Version: referrer solution (previous uri)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

El Forum

[eluser]GrahamDj28[/eluser]
Hi All!

I have seen a lot of people using http_referer for redirecting to a previous page. But I have also read that this is not reliable, as it is not always set and can easily be injected with fake information by the client.

Needing a solution I have come up with this.

I have extended the CI_URI class by creating a MY_Uri.php

Copied the _reindex_segments method form the original class and added it to MY_Uri.php
Code:
public function _reindex_segments() {
    // Call the the referer method
    $this->set_referer();
  
    array_unshift($this->segments, NULL);
    array_unshift($this->rsegments, NULL);
    unset($this->segments[0]);
    unset($this->rsegments[0]);
}

private function set_referer() {
    // Set the base url
    if (isset($_SERVER['HTTP_HOST'])) {
        $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
        $base_url .= '://'. $_SERVER['HTTP_HOST'];
        $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
    }

    // Set the current url
    $url = rtrim($base_url,'/').$this->uri_string.'.html';
    // Check if referer has been set, if so, set it as previous url
    // If it has not been set it means this is the first page call
    if(array_key_exists('referer', $_SESSION)) {
        // Check that the current url is not the same as the previously set referer
        // We do this incase the current page is refreshed
        if($url !== $_SESSION['referer']) {
            $_SESSION['prev_url'] = $_SESSION['referer'];
        }
    }
    // Set the referer url
    $_SESSION['referrer'] = $url;
}

Now if I want to return to the previous page I can just call
Code:
$_SESSION['prev_url']
Is this a solid solution, or does anybody have a better and or more secure solution?

Thanks!