- ベストアンサー
違うページでも同じcookieをロードする
http://okwave.jp/qa3882347.htmlの質問をさせて頂いた者です。 おかげさまで作りたかったものが作れたのですが、その後別の問題が 起きて悩んでいます。 上記の質問で教えていただいたスクリプトで問題なく作れて作動したのですが、同じスクリプトでデータ内容の違う別のベージでも使いたかったのですが、そうすると同じcookieをロードしてしまいます。 (内容の重複する物と、まったく違う物等の複数のページで同じスクリプトを使います。) 朝から半日掛かって色々試したり本読んだりしたのですが、例文と構文の記述形式が違って解りませんでした。 function setvalue(o,v){ for(i=0;i<o.length;i++) if(o[i].value==v) o[i].selected=true; } function saveCookie( vn, v, dy ){ if(navigator.cookieEnabled) document.cookie = vn+ '='+ v+ ';expires='+ new Date((new Date()).getTime()+dy*24*3600000).toGMTString(); } function loadCookie(vn){ var rt=''; if( vn && document.cookie ) { var v = document.cookie.split(';'); for(i in v){ v[i].match(/^\s*(.*)=(.*)$/); if( RegExp.$1 == vn) { rt = RegExp.$2; break; } } } return rt; } にあるfunction saveCookie( vn, v, dy ) function loadCookie(vn) の【vn】【v】がcookieの名前と値?と思って 色々試したのですがダメでした。 まったく見当違いなのか、それともそれ以外にも何か指定しないといけないのでしょうか? 初歩的な質問で度々すいませんがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 『保存1』のsaveをすると URL; v1=0/0/0/false/false/false; __utma=***.***.***.***.***.1; __utmz=***.***.1.1.utmcsr =(direct)|utmccn=(direct)|utmcmd=(none); style=test という形でdocument.cookieとして保存されています(※一部省略、環境によってはちょっと違うかもしれないですけど) で次に『保存2』でsaveすると URL; v1=0/0/0/false/false/false;v2=0/0/0/false/false/false; __utma=***.***.***.***.***.1; __utmz= ***.***.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); style=test のようにv2=0/0/0/false/false/false;が追加されていきます(以下v5まで同様) 『保存1』で上書き保存したときには URL; v1=1/3/2/true/false/false;v2=0/0/0/false/false/false; __utma=***.***.***.***.***.1; __utmz= ***.***.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); style=test のようにv1=****;の部分が変更されていきます で『保存1』でloadしたときにはこの v1=****: の部分を取り出してやってるわけです 何が言いたいかというと<script>内を変更しているとありますがHTML本体は変えていますか?(特に<select name="selectsave">の<option value="">) このvalue値がcookieの名前というか判別材料になっています
その他の回答 (2)
function saveCookie(vn,v,dy){・・・ですが、 vnは変数の名前、vは変数の値,dyは保存する期間です いくら関数を変えてもvnにあたる部分を同じ名前にしてしまっては 参照したとき同じ値になってしまいます 読み書きする関数はそのままでいいので、vnに代入する名前を それぞれのページで別のものを使用してくださいね あとこの関数は不完全で使えない記号とかあるのでご注意を!
お礼
前回、教えていただいてありがとうございました。 前回教えてもらって助かりました。 なんとか出来そうで質問を閉じてしまったんですが、 後から解らない所が出てきました;; でも、やっとスクリプトの流れが意味を理解できました。 ありがとうございました。
- shimix
- ベストアンサー率54% (865/1590)
「別のページ」が違うpathであれば、pathを指定すればいいのでは? http://www.tohoho-web.com/wwwcook.htm >【vn】【v】がcookieの名前と値?と思って >色々試したのですがダメでした。 たしかにそうなっていると思います。「いろいろ試した」というのは、どういうことを試されたんでしょうか。Cookieのread/write時に、vnとなっているのを「ページ固有の文字列+vn」にすればいいように思えますが・・。
お礼
やっとスクリプトの流れが意味を理解できました。 ありがとうございました。
補足
さっそくのご返事ありがとうございます。 自分で変更したのを載せておきます。 function setvalue(o,v){ for(i=0;i<o.length;i++) if(o[i].value==v) o[i].selected=true; } function saveCookie( pp, v1, dy ){ if(navigator.cookieEnabled) document.cookie = pp+ '='+ v1+ ';expires='+ new Date((new Date()).getTime()+dy*24*3600000).toGMTString(); } function loadCookie(pp){ var rt=''; if( pp && document.cookie ) { var v = document.cookie.split(';'); for(i in v){ v[i].match(/^\s*(.*)=(.*)$/); if( RegExp.$1 == pp) { rt = RegExp.$2; break; } } } return rt; } function setvalue(o,v){ for(i=0;i<o.length;i++) if(o[i].value==v) o[i].selected=true; } function saveCookie( ap, v2, dy ){ if(navigator.cookieEnabled) document.cookie = ap+ '='+ v2+ ';expires='+ new Date((new Date()).getTime()+dy*24*3600000).toGMTString(); } function loadCookie(ap){ var rt=''; if( ap && document.cookie ) { var v = document.cookie.split(';'); for(i in v){ v[i].match(/^\s*(.*)=(.*)$/); if( RegExp.$1 == ap) { rt = RegExp.$2; break; } } } return rt; } この2つの別々のものにしたのですが、どこか間違えているでしょうか? よろしくお願いします。
お礼
あぁ、なるほど。 今やっとスクリプトの流れがわかりました。 テキスト本などと見比べて考えていたのですが、 今回の場合はそこでセレクトの保存1、保存2と追記 していってるから、テキスト本とかサイトの解説してるように その箇所を変更してもダメだったんですね。 html本体の事は完全に失念していました。 わかり易い説明で初心者でも理解できました。 わざわざありがとうございました。