クッキーを使って名前と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
の通りでばっちりできました。
どうもありがとうございました。

[上に] [前に] [次に]