016:Cookieを発行する方法(配列含)とタイミング対象言語:PHP|JavaScript / jQuery
|
|
| キーワード:PHP JavaScript jQuery cookie クッキー 発行 保存 取り出し 配列 オブジェクト サンプル setcookie $.cookie header | |
|
Cookieがどういうものかという説明は割愛します。またPHPではセッション(Session/$_SESSION)の話題には触れません。
ここではクライアントサイドにCookieを発行するタイミングと方法を、PHP($_COOKIE)とJavaScript(「jQuery Cookie Plugin」を使用)の2通りについて説明します。さらに、jQuery Cookie Plugin v1.3からオブジェクト(連想配列)を扱えるようになったので、配列データの保存・取り出しについても書いてみます。
タイミングと言っても、そこに気を使わないとイケナイのはPHPだけです。もし次のようなエラー(Warning)が発生したなら、
|
|
//単一データの保存
$timeout = time() + 7 * 24 * 3600; //UNIXタイムスタンプで7日間の有効期限
setcookie("test_1", "data_1", $timeout);
// その呼び出し
if (isset($_COOKIE['test_1'])) {
echo $_COOKIE['test_1'];
}
//出力>> data_1
//配列データの保存
$timeout = time() + 20 * 3600; //UNIXタイムスタンプで20時間の有効期限
setcookie("test_2[iti]", "Fuji", $timeout); //配列の体ではあるものの、個々に
setcookie("test_2[ni]", "Taka", $timeout); //Cookieなわけで、有効期限や
setcookie("test_2[san]", "Nasubi", $timeout); //削除などは個々に設定・実行。
// その呼び出し
if (isset($_COOKIE['test_2'])) {
foreach ($_COOKIE['test_2'] as $key => $value) {
echo $key . ":" . $value . "\n";
}
}
//出力>> iti:Fuji
//出力>> ni:Taka
//出力>> san:Nasubi
<!--- HTMLヘッダ ---> <head> //・・・ <script type="text/javascript" src="./js/jquery.js"></script> <script type="text/javascript" src="./js/jquery.cookie.1.3.js"></script> <script type="text/javascript"> <!--- (A)ここにJavaScriptの処理を書き加える。 ---> </script> //・・・ </head> <body> <!--- (B)ここにテスト用のHTMLコードを書き加える。 ---> </body>
//単一データの場合
//(A)部分のJavaScript
$(document).ready(function() {
//Cookieがある場合は呼び出して表示。
$("#hyouji_3").html($.cookie("test_3"));
//「data_3保存」をクリックすることでCookieに保存
$("#cook_3").click(function(){
$.cookie('test_3', $("#input_3").val(), {expires: 1}); //有効期限1日
});
});
//(B)部分のHTMLコード
<input type="hidden" id="input_3" value="data_3" />
<input type="button" id="cook_3" value="data_3保存" />
<div id="hyouji_3"></div>
//オブジェクト(連想配列データ)の場合
//(A)部分のJavaScript
$(document).ready(function() {
$.cookie.json = true; //配列を扱う宣言
//Cookie内のJSON形式の配列は自動的にオブジェクトに変換
var data_obj = $.cookie("test_4");
for (key in data_obj) {
$("#hyouji_4").append(key + ":" + data_obj[key] + "\\n");
}
//「data_4保存」をクリックすることでCookieにオブジェクトを保存
$("#cook_4").click(function(){
data_obj = {};
//オブジェクトを生成
for (i=1;i<=3;i++) {
data_obj[$("#input_4_"+i).attr("name")] = $("#input_4_"+i).val();
}
//オブジェクトを自動的にJSON形式の配列に変換
$.cookie('test_4', data_obj);
});
});
//(B)部分のHTMLコード
<input type="hidden" id="input_4_1" name="iti" value="Fuji" />
<input type="hidden" id="input_4_2" name="ni" value="Taka" />
<input type="hidden" id="input_4_3" name="san" value="Nasubi" />
<input type="button" id="cook_4" value="data_4保存" />
<div id="hyouji_4"></div>
|