我正在尝试在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)上运行在 Apache 2.2.20 和 PHP 版本 5.3.6 上运行。
嗯,我认为您误解了 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
}