2013-04-17 82 views
3

我有一個問題,我需要幫助。我正在做一些簡單的步驟:爲什麼無法在瀏覽器中讀取由PHP設置的cookie與php?

  1. 我用PHP設置cookie(如果它尚未設置)。
  2. 我再次用PHP讀取這個cookie,它工作正常(對所有瀏覽器!)。
  3. 我重置了我以前用javascript設置的cookie,這次。
  4. 我讀了JavaScript設置的cookie與PHP和Firefox,鉻它工作正常,但在資源管理器,歌劇,Safari(我使用最新版本)它不起作用。 cookie不能被讀取。沒有錯誤返回,但cookie的字段爲空。請參閱下面的代碼。

PHP代碼:

<?php 
    if (isset($_COOKIE["parameters"])){ 
      $UserParam = json_decode($_COOKIE["parameters"],true); 
      print_r($UserParam); // when the cookie is set by php it prints the array (on all browsers), but when cookie is set by javascript nothing print on explorer,opera,safari. 
      echo"<script>function readCookie(){ alert(\"the cookie was there with radius: ".$UserParam['radius']." type: ".$UserParam['type']."\"); //again when the cookie set with php the variables have values on every browser, but when the cookie set with javascript no values to the variables. 
          getLocationFunction(\"".$UserParam["radius"]."\",\"".$UserParam["type"]."\",\"".$UserParam["date"]."\",\"".$UserParam["name"]."\")}</script>"; 
    } 
    else { 
      $defaultParam = array("radius" => "ως 50km","type" => "all","date" => "unlimited", "name" => "all"); 
      $defaultParamSerialized = json_encode($defaultParam); 
      setcookie("parameters","$defaultParamSerialized",time()+3600); 
      echo"<script>function readCookie(){ alert(\"there was no cookie so i set it: radius ".$defaultParam["radius"]."\"); 
          getLocationFunction(\"".$defaultParam["radius"]."\",\"".$defaultParam["type"]."\",\"".$defaultParam["date"]."\",\"".$defaultParam["name"]."\") 
         } 
       </script>"; 
    } 

?> 

javascript代碼:

function renewCookie(){ 
    var myArray = {radius: radius, type: type, date: price , name: company }; 
    var valueSerialized = JSON.stringify(myArray); 
    createCookie('parameters',valueSerialized,999); 
    } 
function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toGMTString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
    } 

同樣,我在使用PHP所有情況下讀取cookie,但是當我用PHP創建它可以閱讀所有瀏覽器的可愛,當我用JavaScript創建它可以很好地閱讀Firefox,鉻,但不是在資源管理器,歌劇和Safari瀏覽器。

note1:沒有語法錯誤。

note2:瀏覽器是最新版本。

plz help。先謝謝你!

+0

你是否檢查過valueSerialized包含你的數組在這些瀏覽器中。也許你需要輸入數組的鍵? –

+0

@BassJobsen如果我們在談論同樣的想法,我已經完成了這一步,並且我播種了JavaScript以不同於php的方式序列化cookie的價值。但同樣的想法也發生在Firefox和鉻,但它的工作原理,正如我所說。任何更遠的指示? – gerti

+1

大部分功能寫入cookie,就像http://www.w3schools.com/js/js_cookies.asp使用escape()的值 –

回答

0

試一下,

更改此

if (isset($_COOKIE["parameters"])){ 

與此

$COOKIE = isset($_COOKIE["parameters"]) ? $_COOKIE["parameters"] : ""; 

並使用print_r($_COOKIE)與任何瀏覽器看到的差異。

+0

謝謝你的回答,但問題不在於if語句,但javascript編碼如何數據在cookie中。我用Bass Jobsen的建議來解決它,使用escape(),比如w3schools.com/js/js_cookies.asp。 – gerti