
お世話になります。
外部URLからgetされる内容をCookieに書き込んで利用したいのですが、うまくいきません。
外部から送られてくる内容は以下のものです。
<form method="get" action="https://www.xxxxxxxx/kiyaku.html" target="_blank">
<input type="hidden" name="id_agency" value="00000000">
<input type="image" name="submit" src="images/b.gif">
</form>
読み書き用のjavascriptとして、以下のものを作ってみました。
cookie.js
ckary = new Array();
//setcookie ここから
function setck(){
ckary[0] = document.forms[0].id_agency.value;
exp=new Date();
exp.setTime(exp.getTime()+1000*60*60*24*60);
ckstr = escape(ckary[0]);
i = 1;
while (ckary[i]){
ckstr += "%00" + escape(ckary[i]);
i++;
}
document.cookie = "XX_Agency=" + ckstr + "; expires=" + exp.toGMTString();
}
//setcookie ここまで
//getcookie ここから
function getck(){
cklng = document.cookie.length;
ckary = document.cookie.split("; ");
ckstr = "";
i = 0;
while (ckary[i]){
if (ckary[i].substr(0,10) == "XX_Agency="){
ckstr = ckary[i].substr(10,ckary[i].length);
break;
}
i++;
}
ckary = ckstr.split("%00");
if (ckary[0]) document.forms[0].id_agency.value = unescape(ckary[0]);
}
//getcookie ここまで
javascriptはあまりわかりませんので、本を引きながら作っています。どなたか、指摘お願いします。
No.5ベストアンサー
- 回答日時:
#4の補足に対して・・・。
>alert(id_agency);
変数の目視確認は出来る様になったとおもいますから、
期待する様な値にする為の処理は記述してあるのに、
どこで期待にはずれる値に変わってしまうのか、
>alert(id_agency);
これを各行の間に順次挿入していけば
どこて予定外の値が設定されるのか追えると思いますが・・・。
まぁ処理順に処理内容を追っかけてみても良いかと。
出来れば処理を図に書いて判りやすく(流れ図/フローチャート)が良いのですが、今の処は本人が判れば良い(暗号でも可)のでとにかく処理を理解しましょう。
(START)
|
(ID読み込み)
|
< id_agency == null >--(真)--+
| (偽) |
| (検索)
| |
| <該当なし>---(真)--+
| | <偽> |
| | (ブランクを代入)
| | |
| +----------------+
| |
| (URLより抜き取り)
| |
+--------------------------+
|
(名前保存)
|
(END)
ここまで書けば、問題点も直ぐにわかるかと。
(線は少しずれているかと思いますが、まぁ流れが判ればいいかなぁと。スペースが少々詰められて描画されています。)
この回答への補足
おかげさまで何とか、動作確認できました。
ついでにid_agencyがブランクのときの動作も追加しました。
id_agency = myGetCookie("AGENT"); // ID読み込み
//alert(id_agency);確認用
if (id_agency == ""){
id_agency = null;
}
if (id_agency == null){
baseurl = location.href;
//alert(baseurl);確認用
mytop = baseurl.indexOf("id_agency=",0);
//alert(mytop);確認用
if (mytop == -1){
id_agency = "";
//alert(id_agency);確認用
}else{
id_agency = baseurl.substring(mytop+10,mytop+19);
}
}
//alert(id_agency);確認用
mySetCookie("AGENT",id_agency,60); // 名前保存
たぶん、できる人から見たらひどい出来なのでしょうが目的は何とか果たせています。
No.4
- 回答日時:
#3の補足に対して基本をとりあえず・・・。
ID切り出し
ゴミを含んでいます。
検証方法:処理の後方で alert(id_agency) とでもすれば、簡単な目視での検証は出来ます。
クッキーの書き込み
処理は正しそうですが使用方法の検証は不明。
検証方法:関数を使用してみて Mozilla, Opera などクッキーを検証できるブラウザを用いて検証。
尚、第三引数の有効期限の指定の仕方によっては即時無効になるのは当然の事で・・・。
クッキー読み出し
myCookie の用途不明。故に何故 "@"を用いるのかも不明・・・。
切り出しでゴミを含んでいます。
戻り値の myValue がどこで設定されているのか不明・・・。
以上、いじって適切に動作できました。
ただ、クッキー読み出しの戻り値の状態からして、
変数の状態(内容)を意識するという事がポイントかと・・・。
この回答への補足
お世話になります。
おかげさまで何とか、書込み・読み込みともできるようになりました。
もうひとつ申し訳ないですが、教えていただきたいのですが
get情報なしでリンクしてきた際にURLの途中を拾ってきてid_agencyに当て込んでしまいます。
該当する情報がない場合にはブランクを当てたいのですがうまくいきません。
以下のような書き方でそのような動きになるはずなのですが、どこら辺がおかしいですか?
ご指摘、よろしくお願いいたします。
<script language="JavaScript"><!--
id_agency = myGetCookie("AGENT"); // ID読み込み
if (id_agency == null){
baseurl = location.href;
mytop = baseurl.indexOf("id_agency=",0);
if (mytop == -1){ // id_agencyがない
id_agency = ""; //id_agencyにブランクを代入
}
id_agency = baseurl.substring(mytop+10,mytop+19);
}
mySetCookie("AGENT",id_agency,60); // 名前保存
alert(id_agency);
// --></script>
No.3
- 回答日時:
#2補足
言葉をそのままの意味で書いていたので、
「サイト」とはページの集まりを意味するだけで
別に同じ場所(パス)でも別サイトは作れます。
で、同じ管理者の場合ならその可能性も・・・。
ただ、質問者のイメージでは「別サイト=別サーバ,別ドメイン」(これが普通)だったのでしょうから
まぁ間違いではありません。
ただ、正確にはあくまで「サイト」とは「ページ」の集まりを意味するだけで、
その集まりとはリンクの繋がり方などの構成で言うもので、個々のページの場所は関係ありません。
で、Cookie は場所を意識する物であり、またデータのある場所は閲覧者側の環境であり・・・。
という事で、
> クッキーはサイトをまたいでは持ち越せないと
と覚えてもまぁ困る事はまずないとは思いますが
> クッキーはサーバをまたいでは持ち越せないと
と覚えておく方が知識としては良いかと思います。
参考URL:とほほのWWW入門 の とほほのCookie入門 の Cookieに関するQ&A です。
ここの5項目目
> ◆ path=/ とすると、そのサーバー上のすべてのファイルに対して送信されるの?
> はい。共有サーバーで、迂闊に path=/ などとしないようにしましょう。
この記述から、サイトの位置関係次第では・・・。
参考URL:http://www.tohoho-web.com/wwwcook.htm#CookieQandA
この回答への補足
たびたびありがとうございます。
ご指摘いただいた部分を反映しながら、作り直しをしてみました。
ただ、やっぱりまだうまく動いてません。
作成しなおしたものをアップしますのでまたご指摘いただけませんでしょうか。
<script language="JavaScript"><!--
// ID切出し
baseurl = location.href;
mytop = baseurl.indexOf("id_agency=",0);
agency = baseurl.substring(mytop+10,mytop+19);
id_agency = agency;
// ID切出しここまで
// クッキー書き込み
function mySetCookie(AGENT,id_agency,myDay){
myExp = new Date();
myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000));
myItem = "@" + AGENT + "=" + escape(id_agency) + ";";
myExpires = "expires="+myExp.toGMTString();
document.cookie = myItem + myExpires;
}
// クッキー読み出し
function myGetCookie(AGENT){
myCookie = "@" + AGENT + "=";
id_agency = null;
myStr = document.cookie + ";" ;
myOfst = myStr.indexOf(AGENT);
if (myOfst != -1){
myStart = myOfst + AGENT.length;
myEnd = myStr.indexOf(";" , myStart);
id_agency = unescape(myStr.substring(myStart,myEnd));
}
return myValue;
}
// --></script>
<script language="JavaScript"><!--
確認用
id_agency = myGetCookie("AGENT");
document.write(id_agency);
// --></script>
よろしくお願いします。
No.2
- 回答日時:
> 本を引きながら作っています。
ここに引かれて、敢えて答えでなくて考え方で指摘,説明したいと思います。
(当然、改めて処理自体を知りたい場合は、補足や礼もしくは新たな質問で。)
まず疑問なのが、クッキーを使用するのにHTMLAからHTMLBへの情報伝達が何故FORMでデータ送信する必要があるのか?
送信元で送信せずにその場でクッキーに書き込めば良いのでは?
(送信元に対して編集が出来ない場合はしかたがたりませんが。)
次に不思議なのが、JavaScript の記述のクッキーへの読み書きの対象の情報のやりとりの相手が、フォームなのですが・・・。
これならAで書き込んでしまえばと思ってしまうのですが・・・。っていうか、その様な記述なのですが。
で、ポイントなのが情報のやりとりです。
送信してやりとりするとして、ここでは「外部URL」としている訳ですよね。
ではまず、そのURLを JavaScript で知る手段を・・・。
そうすれば、"https://www.xxxxxxxx/kiyaku.html?id_agency=00000 …
という文字列が参照できるでしょう。
その次はその文字列に対しての文字列検索,文字列の抜き出しで・・・。
以上でとりあえず出来るかと思います。
(クッキーに関しての処理は検証していませんが、まぁ考え方は直すべきデモ処理は大丈夫でないかなぁ~と。)
以上とりあえず。
この回答への補足
ありがとうございます。
まず、外部サイトについてですが、こちらで変更がききません。
それと、こんなことを聞くと笑われそうですが・・・・・
>まず疑問なのが、クッキーを使用するのにHTMLAからHTMLBへの情報伝達が何故FORMでデータ送信する必要があるのか?
>送信元で送信せずにその場でクッキーに書き込めば良いのでは?
サイトがAとBの二つの場合、A側でクッキーを作ることに意味があるんでしょうか?
クッキーはサイトをまたいでは持ち越せないと教えてもらったことがあるんですが。
馬鹿な質問ばかりですいません。
No.1
- 回答日時:
根本的になんか変なので、失礼にあたるかもしれませんが順番に指摘していきます。
まず、ご質問は「外部からget」でよろしいでしょうか?
まず情報発生元のAがあり、そこにご提示のHTML(form)があるのだと。
そしてそれを「された内容をクッキーに書き込みたい」でよろしいのですか?
処理したい場所はBというHTML(JavaScript)であると。
で、ご提示の JavaScript は、同じ場所 BにあるHTMLのformとの情報をやり取りする記述なのですが、
Aからの情報はどこにどの様に存在するかご存知でしょうか?
外部URLからと書かれているのである程度はお分かりかと思いますが、そのURLに対する処理が見当たらないのですが・・・。
クッキー以前の問題かと。
出来れば「外部URLからgetされる内容の取得」と「クッキーの読み書き」は分けてご質問された方が・・・。
というか、まずは別々に作るべきかと思います。
そうすれば質問での提示すべき情報も見えてくるのではないかと・・・。
あと、念の為怖くなったので書きますが
<form method="get"
このgetはサーバーにデータを送る形式の事であり、
取得を意味する訳ではありませんので
失礼かもしれませんが念の為・・・。
この回答への補足
書き方があいまいですいません。
やりたいことですが、以下のようになります。
外部サイトAからGetメソッドで飛んでくる情報をサイトBで読み出しして、クッキーに期間設定とともに書き込み利用したい。
ということです。
指摘いただいたとおり確かに外から来た情報の加工部位がありません。
その程度のレベルでしか、理解できていません。
何とか、よろしくお願いします。
※ メソッドのget/postは理解しています^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
階層別の組織図の自動作成について
-
Adobe acrobat proでフォームを...
-
<tr>指定した表の行要素をボ...
-
二次元配列の中の各行の要素を...
-
イラストレーター、縦中横のシ...
-
jsonテキストデータの並び替え...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
jsonテキストデータの並び替え...
-
jQueryで同じクラス名のものを...
-
jqueryのselect2で検索欄の文字...
-
jsで質問です。 ボタンが二つ存...
-
読み込んだQRコードをフォーム...
-
二次元配列を使って順位をだす...
-
ボタンを押したあとに画像を表...
-
【JS】selectでchangeした時の...
-
Cookieに保存されない
-
初心者です。gulpでコンパイル...
-
【Google Apps Script】「ライ...
-
Adobe acrobat proでフォームを...
-
HTMLでサブフレームから親のス...
-
フォームが空欄の時にフォーム...
-
セレクトを全て選択されていな...
-
GASでチェックボックスを一括of...
-
jQueryでのレスポンシブが綺麗...
-
ブックマークレットについて
-
jsで、配列内の文章を改行する...
おすすめ情報