1

PHPのCookieに値の配列を設定するために次の関数を使用していますが、「追加」および「編集」関数も必要です。これを行う方法についての提案はありますか?

function build_cookie($var_array) {
  if (is_array($var_array)) {
    foreach ($var_array as $index => $data) {
      $out.= ($data!="") ? $index."=".$data."|" : "";
    }
  }
  return rtrim($out,"|");
}

function break_cookie ($cookie_string) {
  $array=explode("|",$cookie_string);
  foreach ($array as $i=>$stuff) {
    $stuff=explode("=",$stuff);
    $array[$stuff[0]]=$stuff[1];
    unset($array[$i]);
  }
  return $array;
}

使用法:

setcookie("mycookies", build_cookie($cookies_array), time()+60*60*24*30);

$cookies_array2 = break_cookie(urldecode($_COOKIE['mycookies']));

    foreach ($cookies_array2 as $k => $v) {
        echo "$k : $v <br />\n";
    }
4

2 に答える 2

2

使用を検討する必要があることの1つは、Cookieデータをエンコードするためのシリアル化と非シリアル化です。ただし、私の経験から、Cookieのシリアル化を解除する前に、Cookieの値にストリップスラッシュを使用する必要があることに注意してください。このようにして、データのシリアル化を解除し、値を変更し、Cookieを再シリアル化して、再度送信することができます。より複雑なデータ型を格納したい場合は、シリアル化により将来的に簡単になります。

例えば:

setcookie("mycookies",serialize($cookies_array),time()+60*60*24*30);

// This won't work until the next page reload, because $_COOKIE['mycookies']
// Will not be set until the headers are sent    
$cookie_data = unserialize(stripslashes($_COOKIE['mycookies']));
$cookie_data['foo'] = 'bar';
setcookie("mycookies",serialize($cookies_array),time()+60*60*24*30);
于 2010-08-06T05:30:01.690 に答える
1

IDだけをCookieに保存し、フラットファイル(ini、シリアル化、またはプレーンテキスト)またはデータベースを使用して値を保存します。重要なのは、Cookieのスペースが大幅に制限されているため、追加する量をできるだけ少なくする必要があるということです。私の最新のプロジェクトの1つは、多くの情報を保存する必要がありました。ssdドライブにアクセスできたので、シリアル化された配列とオブジェクトをzipファイルに入れ、CookieにIDを保存しました。その後、さまざまな部分のハッシュをいくつか保存しました。いくつかの迅速な検証を実行できるようにするためのデータ。

また、セキュリティの観点からは、ID(およびローカルデータのハッシュであるため、IDまたはそのIDの他の形式の検証を簡単に変更できない)だけを使用する方が、データをCookieに入れるよりも安全です。 。

データをCookieとして保存する特別な理由はありますか?

于 2010-08-06T05:50:02.513 に答える