Referer URL PHP之前的URL

时间:2013-08-20 06:32:43

标签: php url session referer

我需要在HTTP_REFERER URL之前获取URL,比如在他到达最后一页之前访问过的URL用户,当我点击按钮时,我在Observer中获得了HTTP_REFERER。

问题是:如何在HTTP_REFERER之前获取以前的URL?

谢谢;)

3 个答案:

答案 0 :(得分:0)

你的意思是这个吗? one_back是上一页。 two_back是之前的两个引用页面。

<?php
    session_start();
    if ($_SERVER['HTTP_REFERER'])
    {
        $_SESSION['two_back'] = $_SESSION['one_back'] ?: NULL;
        $_SESSION['one_back'] = $_SERVER['HTTP_REFERER']?: NULL;
    }
?>

答案 1 :(得分:0)

没有真正的方法可以这样做。 $_SERVER['HTTP_REFERER']只有在您从其他地方链接时才会可用(在这种情况下为引用者)。不是您自己输入网址时。

当您使用某种形式的用户跟踪并将其保存在数据库中时,您可以在当前版本之前获得2个页面。

例如,每次用户访问时,都会使用用户的位置,IP和当前日期时间在数据库中插入一行。

代码示例:

$db = null;

// Try to make a database connection
try
{
    $db = new PDO('mysql:host=localhost;dbname=mydatabase', 'user', 'password');
}

// In case of failed connection,
// catch the error so it won't give away your information.
catch(PDOException $e)
{
    die("Connection failed");
}

// Prepare the statement
$trackUser = $db->prepare("INSERT INTO `mytable`(`IP`, `URL`, `Date`) VALUES(:ip, :url, :date)");

// Set the datetime in yyyy-mm-dd hh:mm:ss
$datetime = strftime("%F %T");

// Bind everything
$trackUser->bindParam(":ip", $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$trackUser->bindParam(":url", $_SERVER['REQUEST_URI'], PDO::PARAM_STR);
$trackUser->bindParam(":date", $datetime, PDO::PARAM_STR);

$trackUser->execute();

但是直接从用户那里得到它?你不能这样做。

来自手册

  

将用户代理引用到的页面地址(如果有)   当前页面。这是由用户代理设置的。并非所有用户代理都会   设置这个,有些提供修改HTTP_REFERER的能力   特征。简而言之,它无法真正被信任。

答案 2 :(得分:0)

我这样做的方法是使用nginx将uri存储为get字符串

error_page 404 $scheme://$host/404.php?referer=$request_uri;

所以website.com/not-found将转到website.com/404.php?uri=/not-found

显然这是一个测试案例,但如果你知道有类似的问题,那么你可以走这条路。