php - 将 $_SERVER ['REQUEST_URI' ] 保存为 cookie 时的 float 后缀

标签 php apache cookies uri setcookie

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

但是,cookie 值始终包含 float ,例如 path/to/file.php?0.449978803506048。如果 URI 包含参数,这些参数将被删除并替换为 float 。

访问页面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。

最佳答案

嗯, 我认为您误解了 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
}

关于php - 将 $_SERVER ['REQUEST_URI' ] 保存为 cookie 时的 float 后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11079426/

相关文章:

php - Ajax 调用和保护 .js 文件信息

php - 在 PHP/MySQL 中存储大量表单数据的最佳方式?

.net - MD5Crypt 背后的算法

asp.net - 几次 window.open 调用后,我的 ASP.NET session 超时

php - 从 MySQL 检索选定的数据

php - 如果数据存在,防止将数据插入数据库

php - 首先会发生什么? .htaccess 或 php 代码?

java - 如何以编程方式获取 Apache 项目上托管的项目的详细信息(我们有 API)吗?

Javascript 使用 JSON 将对象推送到 cookie

javascript - npm 强硬cookie : save a cookie and then dump it