2012-03-27 15 views
1

大きなJSON文字列をクッキーに保存する方法は?私はクッキーのみを使用しなければなりません、私の場合、セッションはオプションではありません。誰もが文字列を圧縮し、クッキーに格納し、それを正常に取得するためのサンプルコードを投稿できますか?ありがとう。PHPを使用して大きなJSON文字列をクッキーに保存する方法

+0

http://php.net/manual/en/features.cookies.phpを読んだことがありますか? – Jon

+0

はい、私はそれを読んでいます。 – Dev

+0

http://stackoverflow.com/questions/4225030/jquery-save-json-data-object-in-cookie – NAVEED

答えて

3

データを圧縮することは素晴らしい考えではありません。むしろ、私はそれをデータベースに保存し、データベースエントリのIDをクッキーに保存します。 IDでの改ざんも可能ですが、データの改ざんを防ぎます。セッションを使用する方が良いでしょうし、これを排除します。

クッキーにデータを格納することを主張しかし、もし、あなたgzcompress()gzdeflate()またはgzencode()のいずれかを使用してデータを圧縮することができます。これらはすべて圧縮を提供します。 gzdeflate()は、スペース効率が最も良いことがわかり、問題に最適な選択肢になります。そして

$compressedJSON = gzdeflate($json, 9); 
setcookie('json', $compressedJSON); 

はそれが

$compressedJSON = $_COOKIE['json']; 
$json = gzinflate($compressedJSON); 

あなたのデータは、4Kの制限内に収まるようにするために圧縮が十分になる場合でも、覚えておいて読むために、あなたは最終的に超える可能性があり、そのすべきJSONの量格納する必要があるデータが増加します。

代わりにデータベースを使用することをお勧めします。

+0

gz * function zlib拡張を有効にする必要があることに注意してください。デフォルトでは、Windows以外のマシンでは使用できません。 –

+0

このようなデータをDBに保存するのが最善の方法です。 – Dev

0

これは何か?

エンコード

$sJSON = json_encode($sSomeJSONData); 
setcookie('json', $sJSON); 

デコード

$sJSON = json_decode($_COOKIE['json']); 

--- EDIT ----

ゴーgzipやそれが最も理にかなっているデータベースを使用するためのクリスチャンの答えと...しかし、データベースを使用できない場合は、セッションを手動で構築することができます。

すべてのセッションは、技術的にはWebツリーの外部に格納されたデータを含むテキストファイルです。 uniqid()のようなものを使用してそのプロセスを複製して、「セッション名」を生成することができます。

"セッション名"をファイル名として使用して、特定のディレクトリにテキストファイルを作成し、 "セッション名"をクッキーに保存します。

そして、単純にテキストファイルを見つけるために、クッキー内のデータを使用して、あなたのプログラムとテキストファイル間でデータを転送するserialize()unserialize()file_put_contents()file_get_contents()を使用しています。

いくつかの健全性チェックとハイジャック防止が必要ですが、原則は健全です。

+0

その前にJSON文字列を圧縮する必要があります。 JSON文字列が長すぎます。 – Dev

+0

名前、値、有効期限など、Cookie全体に4Kの制限があります。データがその制限を超えていれば、クッキーにどのようにデータを格納するかということです。 – marvin

+0

@marvin:素晴らしい!あなたはほとんどそこにいます。私は、データを圧縮してクッキーに保存するソリューションを探していました。しかし、誰かがそれに類似した(例えば、複数のクッキーを使用して)投稿することができれば、私は感謝するでしょう。 – Dev

0

情報量が多い場合は、代わりにローカルストレージを使用することを検討してください。すべてのブラウザがローカルストレージをサポートしているわけではありませんが、すべてのブラウザがローカルストレージをサポートしています。 Cookieが大きすぎると、httpエラーが発生する危険性があります。

サイズの問題がなく、すべてのリクエストで大きなクッキーを渡す必要がないので、クッキーに一意のIDを保存するだけです。次に、一意のIDを使用して、memcache、mysql、または他のサーバー側のストレージから大きなデータオブジェクトを取得できます。セッションは必要ありません。

+0

あなたは私たちがどのくらい大きなクーリーを保存することができるか教えてください....私たちは500単語のようなクッキーを保存できますか? – StaticVariable

+0

クッキーは最大4Kまでです。クッキー全体(メタデータ+データ)です。それに近い場所にいて、アイテムをローカルに保管する必要がある場合は、ローカルストレージを使用する必要があります。現代のブラウザはすべてそれをサポートしています。 –

関連する問題