将$ _SERVER ['REQUEST_URI']保存为cookie时的浮点数后缀

时间:2012-06-18 08:41:50

标签: php apache cookies uri setcookie

我正在尝试在PHP中做一件简单的事情,并通过保存$_SERVER['REQUEST_URI']的值将当前访问过的页面保存到cookie。

但是,cookie值始终包含一个浮点数,例如path/to/file.php?0.449978803506048。如果URI包含参数,则这些参数将被剥离并由浮点数替换。

访问页面path/to/file.php?param=value

<?php
    $this_page = $_SERVER['REQUEST_URI']; 
    echo $this_page; // returns: path/to/file.php?param=value

    setcookie("last_page", $this_page, time()+3600);

    echo $_COOKIE['last_page']; // returns: path/to/file.php?0.449978803506048
?>

每个页面重新加载的数量更改导致我相信它与时间戳有关。是否有PHP设置或我需要注意的事项?结果在不同的浏览器中是相同的,我也尝试在保存cookie之前对base 64中的值进行编码,但结果仍然相同。

我通常不会编写很多PHP,所以它可能是一个非常简单的解决方案,但我找不到它!

在Ubuntu Server 11.10(GNU / Linux 3.0.0-16-server x86_64)上使用PHP 5.3.6版在Apache 2.2.20上运行。

1 个答案:

答案 0 :(得分:2)

那么, 我认为您误解了setcookie效果,事实上它并没有改变$ _COOKIE变量的当前值,因此您的代码的正确版本可以是以下内容:

<?php
if(isset($_COOKIE['last_page'] )){
        echo  "cookie: ". $_COOKIE['last_page'] .'</br>';   // echo the current val of cookie 
}

$this_page = $_SERVER['REQUEST_URI'];
echo "this val". $this_page ."</br>"; // returns: path/to/file.php?param=value

//setcookie("last_page", $this_page, time()+3600,'/');
setcookie("last_page", $this_page, time()+3600);

?>

分数来自ajax / javascript调用(我肯定是99.99%),你可以在access_log中看到它,如果你看到总是小数值,你会发现一组夫妻在日志中:

127.0.0.1 - - [18/Jun/2012:11:06:04 +0200]  "GET /index.php?0.1234567784534 HTTP/1.1" "-" 
127.0.0.1 - - [18/Jun/2012:11:06:04 +0200]  "GET /index.php?param=val HTTP/1.1" "-" 

修改

检测请求是否为ajax的最佳解决方案(?):

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';){
     // this is an ajax request
} else {
    // set cookie
}