クッキーを使って名前とE-mailを保存するには?
[上に]
[前に]
[次に]
クッキーモンスター
[E-Mail]
1998/05/27(水) 09:46:40
掲示板などでクッキーを使って名前とE-mailを保存しているのを見かけます。
スクリプトを参照して見よう見まねで入れてみたのですが、うまくいきません。
JavaScriptでは、名前だけしか駄目なようですし、perlは複雑そうです。
cookie.libを使うのがシンプルそうだということは分かったのですが、
具体的には仕事の連絡にとほほさんのラウンジを使ってますので、どんなスクリプトを追加すれば良いのでしょうか?
JavaScriptでも、perlでもかまいません。
Aurai
[E-Mail]
[HomePage]
1998/06/01(月) 03:44:18
JavaScriptの処理をとほほさんが書いた
http://www.tohoho-web.com/wwwcook2.txt
を参考に書いてみました。
<html>
<head>
<title>COOKIE TEST</title>
<script language="JavaScript">
<!--
function loading(){
name = getCookie("Name");
mail = getCookie("Mail");
document.form1.cookiename.value = name;
document.form1.cookiemail.value = mail;
document.form1.cookies.value = document.cookie;
}
function cookieinput(){
setCookie("Name", document.form1.cookiename.value);
setCookie("Mail", document.form1.cookiemail.value);
document.form1.cookies.value = document.cookie;
}
function cookiedel(){
document.cookie = "Name=xx; expires=1-Jan-1997 00:00:00;";
document.cookie = "Mail=xx; expires=1-Jan-1997 00:00:00;";
document.form1.cookies.value = document.cookie;
document.form1.cookiename.value = "";
document.form1.cookiemail.value = "";
}
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("");
}
function setCookie(key, val, tmp) {
tmp = key + "=" + escape(val) + "; ";
tmp += "expires=Fri, 31-Dec-2030 23:59:59; ";
document.cookie = tmp;
}
// -->
</script>
</head>
<body>
<form name="form1">
document.cookie = "<input type=text name="cookies" size=100>"
<br><br><br><tt>
Name: <input type=text name="cookiename" size=40><br>
Mail: <input type=text name="cookiemail" size=40><br>
<input type=button value="CookieGet" onClick="cookieinput()">
<input type=button value="CookieDelete" onClick="cookiedel()">
</form>
</tt>
</body>
</html>
こんなかんじでしょうか?
私のページでラウンジをcookie対応にして使っていますが、
そっちはPerl側で処理しています。
Aurai
[E-Mail]
1998/06/01(月) 03:58:57
<tt>の場所がずれてました
ごめんなさい
クッキーモンスター
[E-Mail]
1998/06/01(月) 11:29:21
ありがとうございます。試してみました。
たしかに、クッキーに保存はされてるようです。
ですが、以下のような問題点があるようです。
1.ラウンジなどで使う為にはCookieGetと、CookieDeleteのボタンはどうなるのでしょうか?
2.再読み込みの時はクッキーを読み込むようですが、同じhtmlファイル名を打ち込んで、もう一度読み込むと、今度は表示されません。
3.PerlのFormの中にJavaScriptのフォームを入れ子にできるのでしょうか?
現実的には、発言のFormの「名前」「メール」の部分を一度書き込んだら、
期限まではいつ来てもクッキーから読み込んで表示して欲しいと思っています。
横井勝
[E-Mail]
[HomePage]
1998/06/01(月) 12:13:20
クッキーモンスターさん、こん**は。
>1.ラウンジなどで使う為にはCookieGetと、CookieDeleteのボタンはどうなるのでしょうか?
私自身、ラウンジの中に「終了する」という名前のリンクを作りました。
そのリンク先のページには、次のようなヘッダの入ったhtmlファイルを置きました。
|<META HTTP-EQIV-"Set-Cookie" VALUE="ホゲホゲ = 0">
このようにすると、「ホゲホゲ」というクッキーが削除されます。
>2.再読み込みの時はクッキーを読み込むようですが、同じhtmlファイル名を
>打ち込んで、もう一度読み込むと、今度は表示されません。
次の状態なら再読み込みでもクッキーが書き込まれます。
・JavaScript を使った場合
・<META>タグを使った場合。
次の場合は再読み込みをしてもクッキーは書き込まれません。
・perlで「print "Set-Cookie: ホゲホゲ= abc\n";」とした場合
いまいちな答え方しかできなくてすみません。m(..)m
Aurai
[E-Mail]
[HomePage]
1998/06/01(月) 16:55:24
この前のJavaScriptが動かなかったのは
onLoad="loading()"を記述し忘れてしまったためです
ごめんなさい
wwwlngに組み込もうとしたのですがJavaScriptで記述したところ
NN3でエラーが発生したため(不正な処理をして終了してしまう)
今回、Perlでの処理を載せます
#
# メインルーチン
#
{
&readParam();
の次に
$cookies = $ENV{'HTTP_COOKIE'};
@spcookies = split(/;/,$cookies);
foreach $cooking (@spcookies) {
($name, $value) = split(/=/, $cooking);
$name =~ s/ //g;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$COOKIE{$name} = $value;
}
if($ARGV[0] eq "create" || $ARGV[0] eq "write"){
print "Set-Cookie: FROM=$FORM{'FROM'}; expires=Fri, 31-Dec-2030 23:59:59 GMT\n";
print "Set-Cookie: EMAIL=$FORM{'EMAIL'}; expires=Fri, 31-Dec-2030 23:59:59 GMT";
$COOKIE{'FROM'} = $FORM{'FROM'};
$COOKIE{'EMAIL'} = $FORM{'EMAIL'};
}
と書き加えてください。
次に、新規作成・追加発言フォームの
FROM
EMAIL
のVALUEを
$COOKIE{'FROM'}
$COOKIE{'EMAIL'}
の様にしてください。
print "<INPUT TYPE=text SIZE=50 NAME=\"FROM\" VALUE=\"$COOKIE{'FROM'}\"></TD></TR>\n";
上記のように記述します。
クッキーモンスター
[E-Mail]
1998/06/01(月) 18:40:23
早速試してみました。やった〜♪と思ったら、書き込みボタンをクリックすると、
「プラグインの説明を見るか?cgiファイルを開くか?cgiファイルをダウンロードするか?キャンセルか?」のダイヤログボックスが出てきてしまいます。
.htaccessで、
AddType application/x-httpd-cgi .cgi
AddType application/x-httpd-cgi .pl
を指定してあるのですが、どうしてでしょうか?
Aurai
[E-Mail]
[HomePage]
1998/06/01(月) 23:40:04
何度もミスしてごめんなさい
print "Set-Cookie: FROM=$FORM{'FROM'}; expires=Fri, 31-Dec-2030 23:59:59 GMT\n";
print "Set-Cookie: EMAIL=$FORM{'EMAIL'}; expires=Fri, 31-Dec-2030 23:59:59 GMT";
を
print "Set-Cookie: FROM=$FORM{'FROM'}; expires=Fri, 31-Dec-2030 23:59:59 GMT\n";
print "Set-Cookie: EMAIL=$FORM{'EMAIL'}; expires=Fri, 31-Dec-2030 23:59:59 GMT\n";
としてください。
二行目の改行が抜けていたため、Content-typeにCookieが重なってしまい判別が出来なかったのです。
クッキーモンスター
[E-Mail]
1998/06/02(火) 00:55:50
[[解決]]
ありがとうございました。今度はばっちりです。解決チェックを入れます。
なお、JavaScriptの場合で、
onLoad="loading()"
を入れるのはどの位置に入れるのでしょうか?
Aurai
[E-Mail]
1998/06/02(火) 06:47:39
onLoadは<body>に書きます
<body onLoad="loading()">
になるわけです
ラジオ
2000/01/21(金) 17:42:36
ちょうどやりたいことが見つかったので
参考にして試したのですが できませんでした。
私の使っているラウンジのVer2.06では
新規作成・追加発言フォームが
<INPUT TYPE=text SIZE=50 NAME=\"NAME\">
--------------------------------------------------
メインルーチンが
# フォームデータを読み込む
if (!&readParam()) {
&showErrorPage("データの読み込みに失敗しました。");
exit(0);
}
# それぞれのページ表示にジャンプ
if ($#ARGV == -1) {
--------------------------------------
となっています。
<INPUT TYPE=text SIZE=50 NAME=\"NAME\" VALUE=\"$COOKIE{'FROM'}\">
とし、
}
〜〜〜〜〜〜〜〜〜〜〜〜〜〜
# それぞれのページ表示にジャンプ
〜〜にAuraiさんのスクリプトを入れてみました。
wwwlng.cgiは動作したのですが、クッキー機能が働きませんでした。
VALUEとNAMEが違うのが原因なのかと思い
<INPUT TYPE=text SIZE=50 NAME=\"NAME\" VALUE=\"$COOKIE{'NAME'}\">
とし、スクリプトのFROMをNAMEにしたのですがこれも働きません
でした。
どのように修正すればよろしいのでしょうか?
よろしくお願いします。
Aurai
[E-Mail]
2000/01/22(土) 00:12:11
../199910/99100046.htm
上の書き込みを参照してください
ラジオ
2000/01/24(月) 09:25:26
[[解決]]
../199910/99100046.htm
の通りでばっちりできました。
どうもありがとうございました。
[上に]
[前に]
[次に]