クッキーを使う
ひとつの変数に複数の変数を持たせる方法を考えた。クッキーの中に入れるものというわけで、名づけてチョコチップ。アプレットとの共同作業になる。ここで保存できるのはINT型の変数のみ。必要にあわせて変更しよう。
考え方 クッキーには変数ではなく、文字列を保存する。その文字列は複数の変数を含んだ文字列とする。
例 ^aino545455^don987^oki^256^sun80066^qtec909034
例の文字列は、aino,don,oki,sun,qtec という、5個の変数を含んでいる。後に続いているのが変数の中身だ。区切りは「^」記号を使っている。まず、こういう文字列に変数を追加したり取り出したりするアプレットを作成する。以下はそのソース。C使いの人ならもっと洗練されたコードが書けると思うが、まあ参考までに。
最初は文字列を作成する&置き換えるためのfunction。
// チップとは、クッキーの変数の中にさらに文字列として複数の変数を
// 持たすための仕組み
public String makeChip(String s, String name, int val) {
// String s は、もともと入っているチップ、ない場合は""を入れる
// String name は、チップに入れる変数名
// int valは、name の中身
// sはたとえば
// name1234567^vict656789^vive9890^mind9000
// name はたとえば
// newdata
// val はたとえば
// 98989098
String rets;
// 書き込む数値をストリングに変換する
String vals = Integer.toString(val);
int i;
if(s !=null){
i= s.indexOf(name); // すでに名前があるか調べる
} else {
i= -1;
}
if(i==-1){
// 名前がなかった場合 単純に追加する
if(s !=null){
rets = s + "^"+ name+vals; // 元文字列があったので追加
} else {
rets = name+val; // 元の文字列がない場合
}
} else {
// 名前があったので置き換える
String mae = s.substring(0,i);
String go = s.substring(i,s.length());
int pp = go.indexOf("^");
String gogo = go.substring(pp+1, go.length());
rets=mae + gogo + "^" + name + vals;
}
return rets;
}
次は文字列から変数の値を数値として取り出す関数。
// クッキーから取り出した文字列から目的の変数の値を取り出す
// 名前がない場合は0を返す
public int getChip(String s, String name) {
// s は1変数の文字列
// name はsから取り出す変数の名前
String gogo;
int i= s.indexOf(name); // すでに名前があるか調べる
if(i==-1){
// 名前がなかった場合 0を返す
return 0;
} else {
// 名前があったので取り出す
String mae = s.substring(0,i);
String go = s.substring(i,s.length());
int pp = go.indexOf("^");
if(pp != -1){ // 最後でなければ切り出す
gogo = go.substring(0, pp);
} else {
gogo = go;
}
String get = gogo.substring(name.length(),gogo.length());
int retv;
try{
retv=Integer.parseInt(get);
} catch (NumberFormatException e){
// 失敗
return 0;
}
// 成功
return retv;
}
}
HTML内での使用法
チップ用CLASSをHTMLに貼り付ける。もちろん上の参考ソースからアプレットを作成してクラスファイルを作る必要がある。
<applet width="1" height="1" code="Cchip.class" NAME="chip">
</applet>
クッキー用文字列を作成してクッキーに保存する
function set(){
// 3個の変数を入れた文字列を作成する
var s="";
d=document.chip.makeChip(s,"t1a",1012345990);
d=document.chip.makeChip(d,"t2a",555888999);
d=document.chip.makeChip(d,"t3a",12312345);
// 作成した文字列を chip1 の名前でクッキーに格納する
SetCookie("chip1",d);
alert("ok");
alert(d);
window.open("newpage3.htm", "_top");
}
クッキーから文字列を取り出して変数を取り出す
function set(){
// chip1 の名前で格納した文字列をクッキーから取り出す
s=GetCookie("chip1");
alert(s);
// 取り出した文字列から3個の変数を分離する
t=document.chip.getChip(s,"t1a");
alert(t);
t=document.chip.getChip(s,"t2a");
alert(t);
t=document.chip.getChip(s,"t3a");
alert(t);
// test 既存のクッキーの変更と追加テスト
s = document.chip.makeChip(s,"t1a",5959888);
s = document.chip.makeChip(s,"t5555",5959888);
s = document.chip.makeChip(s,"t6sdf",5959888);
s = document.chip.makeChip(s,"t1a000",298298014);
}
クッキーから取り出した文字列は変更があるまで保存しておくのが望ましい。