2

PHPで簡単なことをしようとしていて、現在アクセスしているページを.の値を保存してCookieに保存しようとしています$_SERVER['REQUEST_URI']

ただし、Cookieの値には常に。などの浮動小数点数が含まれ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を使用するApache2.2.20で実行します。

4

1 に答える 1

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
}
于 2012-06-18T09:19:06.843 に答える