Cookieが消える?

このQ&Aのポイント
  • Webページの画面遷移を繰り返していると、Cookieが消えることがあります。
  • IE 6.0を使用している環境で、自作のWebページでCookieを使って情報を保持しているとのことです。
  • 特にC画面では、別のCookieを削除してからCookieを読み込もうとしているため、Cookieが読み込めない現象が起きています。
回答を見る
  • ベストアンサー

Cookieが消える?

こんにちは 自作のWebページを作成したのですが 画面遷移を繰り返しているとCookieが 消えることがあるのです。 こういうことってあるのでしょうか? 環境は以下の通りです。 OS:Win2000,XP Pro ブラウザ:IE 6.0 Cookie書込み:javascript setCookie("bbb","hammy") function setCookie(key, val, tmp) { tmp = key + "=" + escape(val) + "; "; tmp += "path=/aaa/;"; tmp += "expires=Tue, 31-Dec-2030 23:59:59; "; document.cookie = tmp; } Cookie読込み:javascript function getCookie(key, tmp1, tmp2, xx1, xx2, xx3) { tmp1 = " " + document.cookie + ";"; xx1 = xx2 = 0; len = tmp1.length; while (xx1 < len) { xx2 = tmp1.indexOf(";", xx1); tmp2 = tmp1.substring(xx1 + 1, xx2); xx3 = tmp2.indexOf("="); if (tmp2.substring(0, xx3) == key) { return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1))); } xx1 = xx2 + 1; } return(""); } Cookie削除 javascript delCookies("CCC") function delCookies(key) { tmp = key; tmp += "=;path=/aaa/;"; tmp += "expires=Thu,01-Jan-2000 00:00:01 GMT"; document.cookie = tmp; } 画面遷移 A画面でCookie書込み⇒B画面でCookie情報を読込み ⇒C画面でCookie情報を読込み 現象:C画面でCookieが読込めない。 備考:C画面では読込みの前に別のCookieを削除しています。 B画面ではCookieの有無をチェックしているだけです。 何か疑問に思えることがありましたら教えてください。

  • hammy
  • お礼率84% (32/38)

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 これは俺が実際に経験したことなのですが、書き込まれる直前のクッキー文字列の状態を alert() で表示してみてください。  ただし、俺が使ってんのもやっぱトホホからコピーしてきた奴なので、スクリプト自体は概略として間違ってないはずですが。  上位プログラムのミスで、まれに日付部分がごっそり抜けてたりしますので(^_^;  それから、俺が実際に使用している(動作確認済みの)JavaScript によれば、2030年12月31日は金曜日だそうですよ。

hammy
質問者

お礼

有難うございます。 >上位プログラムのミスで、まれに日付部分がごっそり抜けてたりしますので(^_^; 私も、最初はそれを疑ったのですがちゃんと有効期限が 入っているんですよね。 パソコンによってはCookieが消されることが無く正常に 動作しているんですが・・・。 同じパソコンでも同一動作を行って消える時と消えない時があって、訳がわかりません(泣) 私の持っているフリーカレンダーでは火曜日なんですが・・・(2030/12/31) 2000/1/1は土曜日ですね・・・。こいつの仕業?

その他の回答 (2)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

cookieをいっぱい使ったら駄目

参考URL:
http://e-words.jp/w/cookie.html
hammy
質問者

お礼

返事が遅くなりました。 すみません。 参考URLを拝見させていただきましたが、標準規約があるわけではないので使えわないほうが良いということなのでしょうか? ActiveXを使いたくないがためにcookieを使用しているのですが・・・ どうやら、IE6のプライバシー設定とコンパクトポリシーが関連しているようです。 後、有効期限の指定には必ずGMTで指定することが決まりのようですね。とりあえずこの2つで結果を確認します。 皆様本当に有難うございました。 この質問を締め切らせていただきます。

noname#25358
noname#25358
回答No.1

 クッキーって、画面単位で制御するのが基本じゃなかったでしたっけ……?  IEだと複数画面にまたがって読めてしまうこともあるみたいですけど、それって仕様の範囲だったかなぁ……。

hammy
質問者

補足

すみません。 言葉足らずでした。 Cookieの有効期限を2030年に設定するとDocument&Setting\Cookieにファイルが作成されますが、ファイルが削除されているのです。 B画面では有効期限無しのCookieを作成していますが これは、メモリ上に作成されセッションが切れた時点でメモリから削除されています。

関連するQ&A

  • HPの

    画像(壁紙)を、http?にするにはどうしたらいいんですか?? あと、訪問回数を表示したいんですけど やっても構文エラー?? っていうのになります。 ちなみに、訪問回数のやつは↓です <SCRIPT language="JavaScript"> acTimes=getCookie("AC"); if (acTimes=="") { acTimes=1; } document.write(acTimes+"回目のアクセスサンキュー!!"); acTimes++; setCookie("AC",acTimes); function getCookie(key){ tmp=document.cookie+";"; tmp1=tmp.indexOf(key, 0); if(tmp1!=-1){ tmp=tmp.substring(tmp1,tmp.length); start=tmp.indexOf("=",0)+1; end=tmp.indexOf(";",start); return(unescape(tmp.substring(start,end))); } return(""); } function setCookie(key,val) { tmp=key+"="+escape(val)+";"; tmp+="expires=Fri, 31-Dec-2010 23:59:59; "; document.cookie=tmp; } </SCRIPT>

    • ベストアンサー
    • HTML
  • cookieによる制限の件で

    function getExpires(dd){ var now = new Date(); var expires = new Date(now.getTime()+24*60*60*1000*dd); return(expires.toGMTString()); } function setCookie(key, value, limit){ var cValue = key + "=" + escape(value) + "END;expires=" + getExpires(limit) + ";"; document.cookie = cValue; } function getCookie(key){ var cValue = document.cookie; var sIndex= cValue.indexOf(key,0); if(sIndex > -1){ sIndex = cValue.indexOf("=", sIndex) + 1; eIndex = cValue.indexOf("END", sIndex); return unescape(cValue.substring(sIndex, eIndex)); }else{ return ""; } } var value = getCookie("visitCnt"); var cnt = 1; if(value >= 6){ location.href="http://yahoo.co.jp"; } if(value == ""){ document.write(""); }else{ cnt = parseInt(value) + 1; document.write(""); } setCookie("visitCnt", cnt, 365*2); 以上のソースで、6回目の訪問でyahooへ飛ぶようには出来たのですが、 これだと、設置したページへ6回訪問で、となってしまうのですが、 サイト自体への6回目のアクセスで、というふうに、ページ自体にこだわらずへの設定はどう記載すれば、よろしいでしょうか?? よろしくお願いいたします。

  • クッキーを発行するドメイン名を指定する方法

    function getCookie(keyname){ var tmp = document.cookie + ";"; var index1 = tmp.indexOf(keyname, 0); if(index1 != -1){ tmp = tmp.substring(index1, tmp.length); var index2 = tmp.indexOf("=", 0) + 1; var index3 = tmp.indexOf(";", index2); return(unescape(tmp.substring(index2, index3))); } } function setCookie(keyname, val){ var tmp = keyname + "=" + escape(val) + ";"; var gmt = new Date(); gmt.setTime(gmt.getTime() + 9*60*60*1000 + 24*60*60*1000*365); tmp += "expires=" + gmt.toGMTString(); document.cookie = tmp; } function backFunc(){history.back();} function backEntry(){window.location = "rank2.cgi?mode=show&rank=$IN{'rank'}";} function backOperate(){document.form1.submit();} function startFunc(){ if("$FORM{'savecookie'}" != "save"){return;} if(getCookie("dakenId") != "$FORM{'para3'}"){setCookie("dakenId", "$FORM{'para3'}");} if(getCookie("dakenPass") != "$FORM{'para4'}"){setCookie("dakenPass", "$FORM{'para4'}");} } 現在は、http://ドメイン.com/cgi-bin/abc/ このような階層にクッキーが保存されています。 これを、http://ドメイン.com/cgi-bin/に保存するには、上記スクリプトをどのように変更すればよろしいのでしょうか。 発行したクッキーの参照可能なサイト (URL) として domain 値と path 値があるそうですが、自分なりにここ二日間勉強し続けましたが、クッキーについての知識はゼロに近いため、どうしても自力では解決できそうにありません。 どなたかご存知のかた、何卒宜しくお願いいたします。

  • サイト訪問者に対して1度だけ実行したい

    サイト訪問者に対してあるJavaScriptを1度だけ実行したいのですがよい方法はないでしょうか? 下記コードのようにクッキーを利用して初めての訪問者に対してメッセージを表示させるコードを利用して初めての訪問者に対してJavaScriptを実行させるようにはできないでしょうか? <script language="JavaScript"><!-- var key="freekeyword"; var n=getCookie(key); if(n=="") { alert("はじめまして!\nようこそ"); }else{ alert("\n"+n+"回目の訪問ありがとうございます"); } n++; setCookie(key,n); function getCookie(key) { var s,e; var c=document.cookie+";"; var b=c.indexOf(key,0); if(b!=-1) { c=c.substring(b,c.length); s=c.indexOf("=",0)+1 e=c.indexOf(";",s); return(unescape(c.substring(s,e))); } return(""); } function setCookie(key,n) { var myDate=new Date(); myDate.setTime(myDate.getTime()+6*30*24*60*60*1000); document.cookie=" "+key+"="+escape(n)+"; expires="+myDate.toGMTString(); } // --></script>

  • JavaScriptによるクッキーの書込みについて

    JavaScriptによるCookieの書込みで以下のようにhtmlにはりつけているのですが、どうしてもpath=/が有効になりません。 書き込まれたクッキーをみるとクッキーを書き込むディレクトリになってしまいます。 <script type="text/javascript"> <!-- var limit = 1; //有効期限日数をいれる exp=new Date(); exp.setTime(exp.getTime()+1000*60*60*24*limit); var no = '01010088'; var img_url = './0101/img/0088/01010088i.gif' var url= './0101/01010088.html'; var itemname= '遠赤外線セラミックの竈(かまど)炊き風炊飯鍋と御櫃(おひつ)セット'; var price = '7960'; var souryou = '700'; setCookie(no,'img:' + img_url +',url:' + url + ',itemname:' + itemname + ',price:' + price + ',souryou:'+ souryou +',',exp); function setCookie(key, val, val_exp,tmp) { tmp = key + "=" + escape(val) + "; "; tmp += "expires= " + val_exp.toGMTString(); + "; "; tmp += "path=/;"; document.cookie = tmp; } // --> </script> 書籍をいろいろみたのですがクッキーについて詳しくかいているのがあまりなくて・・・ ご教授お願いします。

  • Cookieの読み込み

    以下の内容をご覧下さい 例1   :   :  (以上のコードは省略) aData = 1; …適当に1を格納 bNo = 1;  …同上 if( setCookie( \"a\",aData,\"b\",bNo ) ) {   :   :  (処理省略)   : }   :   :  (処理省略)   : data = getCookie( \"a\" );   :   : //------------------------------------------------------ // cookieの保存 //------------------------------------------------------ function setCookie(theNameA,theValueA,theNameB,theValueB) { eDate = new Date(); eDate.setTime( eDate.getTime()+( eDate * 1000 * 60 * 60 * 24 ) ); eFile = eDate.toGMTString(); document.cookie = theNameA + \"=\" + escape( theValueA ) + \";\" + theNameB + escape( theValueB ) + \"=\" + \";expires=\" + eFile; return true; } 上記の内容では24時間後期限のCookieを生成しました。 Cookieの中身は a=1↑b=1↑…となっていると思います。 そして今度はcookieからデータを抜き出すのですが、 //------------------------------------------------------ // cookieの呼び出し //------------------------------------------------------ function getCookie( theName ) { theName += \"=\"; cookie = document.cookie+\";\"; convSfile = cookie.indexOf( theName ); if( convSfile != -1 ) { convEfile = cookie.indexOf(\";\",convSfile); return unescape(cookie.substring(convSfile + theName.length,convEfile)); } return false; } これでデータを抜き出そうとすると、convSfileが-1で帰ってくる 為、falseでdataに帰ってしまいます。この場合、どこに問題があるのでしょうか。ご教授お願い致します。

  • Macでクッキーが呼び出せない

    以下のような遷移を作っております。 ・HtmlファイルにJavaScriptでクッキーを以下のように書き込む。 var no = '01010088'; var img_url = '../01010088i.gif'; var url= '../01010088.html'; var itemname= '日本語商品名'; var price = '7,960'; var souryou = '1';//有料の場合は1 無料の場合は0 setCookie(no,img_url +':' + url + ':' + itemname + ':' + price + ':'+ souryou +':'+ exp2 + ':',exp,limit); function setCookie(key,val,val_exp,val_limit) { tmp = key + "=" + escape(val) + "; "; tmp += "path=/ ;"; if(limit > 0){tmp += "expires= " + val_exp.toGMTString(); + "; ";} document.cookie = tmp; } ・CGIでクッキーを呼び出す。その際UTF-16をデコード処理してSjisにしております。 #クッキーの取得 &getCookieName(); ここにデコード処理を書いております。多いので割愛 sub getCookieName { local($xx, $name, $value); foreach $xx (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $xx); $pure_value = $value; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; push @COOKIE,"$name:$value$pure_value:\n"; } } で実際Windowsで閲覧するとクッキー情報が正常に出力されるのですが、Mac、自社サーバーにアップしたページを見るとOKなのですがあるレンタルサーバーに同じものをアップしてみるとだめなのです。 あいまいな表現ですが、なにかこれだけの情報でなにが原因か事例がありますか? もし不足な情報ならご指示ください。

    • ベストアンサー
    • CGI
  • クッキー情報の保存日数

    function setCookie(keyname, val){ var tmp = keyname + "=" + escape(val) + ";"; var gmt = new Date(); gmt.setTime(gmt.getTime() + 9*60*60*1000 + 24*60*60*1000*365); tmp += "expires=" + gmt.toGMTString(); document.cookie = tmp; 上記設定にてクッキーが保存されていますが、1週間もしない内に存された情報が消えてしまいます。1年以上保存しておきたい場合はどのように設定すればいいのでしょうか?

  • クッキー情報の保存日数

    function setCookie(keyname, val){ var tmp = keyname + "=" + escape(val) + ";"; var gmt = new Date(); gmt.setTime(gmt.getTime() + 9*60*60*1000 + 24*60*60*1000*365); tmp += "expires=" + gmt.toGMTString(); document.cookie = tmp; 上記設定にてクッキーが保存されていますが、1週間もしない内に保存された情報が消えてしまいます。1年以上保存しておきたい場合はどのように設定すればいいのでしょうか?

  • Cookieの設定

    JavaScriptでCookieを使ってみようと思い、 以下のようなサンプル関数をもらってきたのですが。 この中の 24 * 60 * 60 * 1000 * 31 * 1 ってそれぞれの数値は何を示しているのでしょうか?? 消去日の設定部分なのは良くわかるのですが。 初歩的な質問で、すいませんが、どなたか教えてください。 ------以下サンプルの関数------ function SetCookie (name,value) { var argv = SetCookie.arguments; var argc = SetCookie.arguments.length; var expires = (argc > 2) ? argv[2] : null; var path = (argc > 3) ? argv[3] : null; var domain = (argc > 4) ? argv[4] : null; var secure = (argc > 5) ? argv[5] : false; document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); } // 消去日の設定は、この関数の中に指定します function set_data(name,put_data) { var expdate = new Date (); expdate.setTime (expdate.getTime() + (24 * 60 * 60 * 1000 * 31 * 1)); SetCookie (name,put_data,expdate); }

専門家に質問してみよう