Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将$#u服务器[';请求&#u URI';]保存为cookie时的浮点数后缀_Php_Apache_Cookies_Uri_Setcookie - Fatal编程技术网

Php 将$#u服务器[';请求&#u URI';]保存为cookie时的浮点数后缀

Php 将$#u服务器[';请求&#u URI';]保存为cookie时的浮点数后缀,php,apache,cookies,uri,setcookie,Php,Apache,Cookies,Uri,Setcookie,我试图用PHP做一件简单的事情,通过保存$\u SERVER['REQUEST\u URI']的值,将当前访问的页面保存到cookie中 但是,cookie值始终包含一个浮点数,例如path/to/file.php?0.449978803506048。如果URI包含参数,这些参数将被剥离并替换为浮点数 访问页面path/to/file.php?param=value: <?php $this_page = $_SERVER['REQUEST_URI']; echo $th

我试图用PHP做一件简单的事情,通过保存
$\u SERVER['REQUEST\u 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服务器11.10(GNU/Linux 3.0.0-16-Server x86_64)上运行Apache 2.2.20,PHP版本为5.3.6, 我认为您误解了setcookie效应,事实上它不会更改$\u 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的最佳解决方案(?):

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

这看起来像jqueryajax调用(当您在禁用缓存的情况下进行调用时,它会添加一个随机数)。客户端代码中是否有Ajax调用?请尝试删除浏览器中的所有COOKIE并重新加载页面。另外,请注意setcookie()不会更改当前页面中$\u COOKIE数组的值。您将在下一页加载时看到更改。@EmilVikström:您是对的,我正在进行一个ajax调用,这导致了这种情况!谢谢是的,我知道我的示例并不完全正确,对此表示抱歉,并感谢改进的示例代码!正如您和Emil Vikström指出的,我正在对同一个页面执行ajax请求,这导致了我的问题。我通过确保ajax调用不会使用URL参数设置cookie来解决这个问题。行得通,但这是最好的解决方案吗?请参阅我文章末尾的编辑。可能这不是最好的解决方案,但这是一个很好的解决方案,而不是向请求中添加参数。
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';){
     // this is an ajax request
} else {
    // set cookie
}