javascripのクッキーで”Out of memory”が出てしまいます。どこがおかしいかチェックしていただければと思います。それと”year””month””day”が1部の人には保存されていないのですが、どういうことが考えられるでしょうか?お願いいたします。*setCookieはコメント欄


function getCookie(name) {
var i, k, j, q, w, x, cookies, value;
cookies = document.cookie.split("; ");
for (i = 0; i < cookies.length; i++) {
value = cookies[i].split("=");
if (value[0] == name) { //Out of memory at line: 374 ←ここ
return decodeURIComponent(value[1]);
}
}
memoret = getCookie("check");
memoret2 = memoret.split(",");
j=memoret2.length;
var choise=document.getElementsByName('choise');
for(k=0;k<j;k++){
choise[k].value = memoret2[k];
choise[k].value.selected = true;
}
memoret3 = getCookie("check2");
memoret4 = memoret3.split(",");
q=memoret4.length;
for(w=0;w<q;w++){
x = memoret4[w];
document.form.q1[x].checked=true;
}
var year = getCookie("year");
var month = getCookie("month");
var day = getCookie("day");

document.form.y[year].selected=true;
document.form.m[month-1].selected=true;
document.form.d[day-1].selected=true;

return null;
}

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2009/11/27 13:10:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答0件)

回答はまだありません

  • id:tontonpokopoko
    //Cookie
    function setCookie(name, value, expires, domain, path, secure) {
    var cookieStr = name + "=" + encodeURIComponent(value);
    cookieStr += expires ? " ;expires=" + expires.toGMTString() : "";
    cookieStr += domain ? " ;domain=" + domain : "";
    cookieStr += path ? " ;path=" + path : "";
    cookieStr += secure ? " ;secure" : "";
    document.cookie = cookieStr;
    }
    expires = new Date();
    expires.setDate(expires.getDate() + 20);
    setCookie("check", ret, expires);
    setCookie("check2", ret2, expires);
    setCookie("year", document.form.y.value, expires);
    setCookie("month", document.form.m.value, expires);
    setCookie("day", document.form.d.value, expires);
    }
  • id:Reiaru
    念のため、
    - Cookie の値として 20 個以上保存する事になった可能性はありますか?
    (例えば現在は name だったものの、開発中は name_1 であり、それが残っているなど)
    - Cookie のサイズ上限 (4096 byte) に達している可能性はありますか?

    サイズ上限に達していれば、後の 3 つ (year, month, day) が保存されなくても不思議ではありません。
  • id:kn1967
    Out of memory だから、ブラウザのトラブルとか、
    ツールバーやflashなどのプラグインとの相性トラブルあたりだと思うんだけど、
    スクリプト自体もクロスブラウザをあまり考慮してないように感じるし・・・、
    正常に動作する環境と非正常な環境を比較してみないと正直判んない。
  • id:tontonpokopoko
    kn1967 さん、コメントをありがとうございます。
    以前は大変お世話になりました。

    Out of memory がそのページに1番最初にアクセスしたときには出ているんですが、
    2度目?からは、Out of memoryが出ないで普通に動作するんです。
    なので放置していたんですが、
    (year, month, day) が保持されない人がいるということで、
    違うPCから試していたら、やはり最初はOut of memoryが出るんですよね・・

    Reiaruさん、コメントをありがとうございます。

    私の環境で、IEとFirefoxでは正常に保持されています。
    ただ何人かのユーザから日付が保持されないとメールをいただいているんです。

    メールは設置している「不都合を送信する」という一方的なフォームからなので、
    ユーザの環境がわからないままなのです。

    クッキーは20個以上は保存していません。
    かなりの量ですが、くっつけて保存し、splitで戻しています。
    (name)についても、見直してみます。

    サイズ上限 (4096 byte)は、気にしたことがなかったのですが、
    どうやって確認するのでしょう?
    自分でもいまから調べてみます。
  • id:Reiaru
    私の認識ではキー名と値の合計の byte 数が 4096 byte 上限だと思っているのですが、
    実際の Cookie には他のデータ (例えば期限など) も書き込まれる訳でして、
    私自身はその辺りがどうなのかはよく知らなかったりもします。

    Cookie は使い方によってはとても便利ですが、そういう制限があるので POST でどうこうしたりする様にしています。
    私が書いた事はあくまでも「可能性を一つ一つ潰す」という事でして、
    実際のところそれで Out of memory などというエラーにはならないとは私も思っています。
    (ですので回答欄には書いておりません)

    > かなりの量ですが、くっつけて保存し、splitで戻しています。
    これは非常に良い設計だと思います。

    どういう事なのか私も興味深かったりしますので…勉強がてら拝見させて頂いている次第です。
  • id:tontonpokopoko
    漠然としたトラブル?で回答がつかないようなので、
    もう少ししたら締め切ります。

    昨日1日かけてプログラムを見直しましたが、これで直るかどうかはわかりません。
    コメントしていただいたお二方、ありがとうございました。

    もうちょっと見直しますが、報告まで。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません