2016-09-07 8 views
0

私はdata-id属性を持つリンクをクリックするたびに呼び出される関数を書いています。配列にIDを追加してクッキーに設定したいのですが、そのクッキーを読み取ることはできません。ここでは、私がこれまで持っているものです。

function add_this_id($the_id) { 
    $name = "mycookie"; 
    /* line below is the issue: */ 
    $value = isset($_COOKIE[$name]) ? json_decode($_COOKIE[$name], true) : array(); 
    $value[] = $the_id; 
    $expire = time() + (60*60*24); //expire in 24 hours 

    setcookie($name, json_encode($value), $expire, '/'); 
    $_COOKIE[$name] = json_encode($value); 

    print_r($value); 
    print_r(json_decode($_COOKIE[$name], true)); 

    die(); 
} 

それが動作し、クッキーが作成され、私はクッキーの値としてIDを検査して見ることができます初めて。しかし、クッキーがすでに存在しているために2回目の試行では、関数json_decode($_COOKIE[$name], true)の2行目が配列の代わりにnullを返すので、新しいIDを追加することはできません。だから私はそうのような配列でそれをラップ試してみました:

$value = isset($_COOKIE[$name]) ? array(json_decode($_COOKIE[$name], true)) : array(); 

しかし、私は現在のIDを設定することができるように空の配列を返すされず、今私は私が空から始まる続けるループに陥っていたすべてIDを付加することはできません。なぜそれが設定された後に$_COOKIE[$name]を読むことができないのですか?何か案は?

+0

@RyanVincentヌル。私もIDを投げ捨てて、IDを正しく設定していることを示しています。なぜブラウザでクッキーを調べると、そこに単一のID文字列が表示されるのか理解できないのですが、それを読み取ろうとするとnullに戻ります。 – user3376065

答えて

0

あなたのコードは正しく見えますが、私はオンラインでテストしています。

enter link description here

+0

2つの異なるIDで関数を2回実行するとします。 print_r(json_decode($ _ COOKIE [$ name]、true));複数のIDではない1つのIDのみを表示しています。 – user3376065

+0

私は間違っているかもしれませんが、あなたのリンクで起こっていることは、クッキーがオフになるので、毎回空の配列から始まるので、以前のクッキー値を読み取ることができないバグのある部分をスキップします。 – user3376065

0

このコードを試してください:

function add_this_id($the_id) { 
    $name = "mycookie"; 
    $value = isset($_COOKIE[$name]) ? json_decode($_COOKIE[$name], true) : array(); 
    echo "Value From Cookie"; 
    echo "<pre>"; 
    print_r($value); 
    array_push($value, $the_id); // Changed HERE 
    $expire = time() + (60*60*24); //expire in 24 hours 

    setcookie($name, json_encode($value), $expire); 
    $_COOKIE[$name] = json_encode($value); 
    print_r(json_decode($_COOKIE[$name], true)); 
    die(); 
} 
    add_this_id('123'); //FIRST ATTEMPT 
    add_this_id('234'); //SECOND ATTEMPT REMOVE FIRST ATTMEPT LINE 

OUTPUT:私は両方のダンプを試してみましたが、最初のものはちょうどクッキーが戻って来ていることを私自身の発見を繰り返し

//First Attempt 
Value From Cookie 
Array 
(
) 
Array 
(
    [0] => 123 
) 

//Second Attempt 
Value From Cookie 
Array 
(
    [0] => 123 
) 
Array 
(
    [0] => 123 
    [1] => 234 
) 
+0

array_pushは私のコードと同じことをしているようですが、バグの部分は関数内の2行目だと思います。クッキーが存在するとき、正しく値を読み取っていないので、クッキー内の値に追加できません。新しいIDを追加する前に$ valueが配列であるかどうかをチェックすると、その配列は表示されません! – user3376065

+0

私はちょうどコードをチェックして、それはうまく動作します。最初の試行では、クッキーに '123'を追加しました.2回目の試行で2回目の試行で '234'を追加しました。 (json_decode($ _ COOKIE [$ name]、true)); – KavitaP

+0

コードを出力に更新しました。 – KavitaP

関連する問題