Cookieをブラウザに送る(2) 承前
次に、set-cookie およびブラウザに表する内容を Perlスクリプト で生成する例を紹介する。 併せて、ブラウザにCookieがドメイン名付きでで残っているかを実際に確かめてほしい。
CGIスクリプトでCookieを書き込む
ごく簡単なset-Cookieスクリプト
simple_cookie_from_meiji.cgiをクリックする。 このCGIスクリプト simple_cookie_from_meiji.cgi は次のように書かれており、実行属性を与えて明治大学に置かれているに置いてある。
#!/usr/bin/perl use strict; use warnings; print <<"EOD"; Content-type: text/html Set-Cookie: customer=taro; domain=isc.meiji.ac.jp; path=/; <html> <head> <title>simple_cookie.cgi from Meiji</title> </head> <body> <h1>simple_cookie.cgi from Meiji</h1> Hello, Daito University! </body> </html> EOD
単純にCookieをクライアントにセットだけのスクリプトで、サーバの応答ヘッダで次のように Set-Cookie したのと同じで、クッキー名は customer である。
Set-Cookie: customer=taro; domain=isc.meiji.ac.jp; path=/;
ここでのCookie寿命は明記されていないので、ブラウザを終了するまでがCookieの寿命である。
ブラウザからCookie値をWebサーバに伝えで Set-Cookieし、これを読み出すスクリプト
次に、sendshow_cookie_from_meiji.cgiをクリックする。 このスクリプト sendshow_cookie_from_meiji.cgi は次のように書かれており、実行属性を与えて関係するページと共に明治大学に置いた。 ここでのクッキーは、ブラウザから入力した文字列を パラメータ key 値とするようにし、さらに有効期限を30秒間としている。
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $cgi = new CGI;
my $cookie_key = 'key';
my $cookie_from_client = $cgi->cookie($cookie_key);
my $param_from_client = $cgi->param($cookie_key);
my $cookie_to_client = $cgi->cookie(
-name => $cookie_key,
-value => $param_from_client,
-expires => '+30s',# life time: only 30 sec
-path => '/',
-domain => 'isc.meiji.ac.jp',
# -secure => 1,
);#ここまででCookie内容を設定。ただし、寿命は30秒!
if ($cgi->param('nowrite')) {
print $cgi->header;
} else {
print $cgi->header(-cookie => $cookie_to_client);# Cookieを表示
}
print $cgi->start_html('sendshow_cookie.cgi');
print $cgi->h1('sendshow_cookie.cgi');
# ブラウザからのパラメータを表示
print $cgi->h2('Parameter from This Client is:');
print $cgi->p($param_from_client);# input Cookie paraneter
# ブラウザに送ったCookieを表示
if ($cgi->param('nowrite')) {
print $cgi->h2('Just sent Cookie to client was');
print $cgi->p("(Already sent. No cookie is set)");
} else {
print $cgi->h2('Cookie to client is:');
print $cgi->p($cookie_to_client);
}
# ブラウザから送ったCookie値
print $cgi->h2('Just sent Cookie is');
print $cgi->p($cookie_from_client);
print $cgi->hr;
# サーバに送るパラメータ値
print $cgi->h2('Send parameter to Server');
print $cgi->start_form;
print $cgi->textfield($cookie_key);
print $cgi->submit('write');
print $cgi->end_form;
# 既に送ったパラメータ値(Cookie寿命30秒以内)を表示
print $cgi->h2('Just reload (not sent before 30 sec) parameter to server is shown above(at Just sent Cookie from is):');
print $cgi->start_form;
print $cgi->hidden(-name => 'nowrite', -value => 1);
print $cgi->submit('Just reload');
print $cgi->end_form;
print $cgi->end_html;
ブラウザから[Send parameter to Server]の後に入力した文字列が Cookieのパラメータ key の値となり、初めてサーバはブラウザにCookieを送り込み、その有効期間を Set-Cookie した時間から + 30 秒としている。
そのときのCookie内容は [Just sent Cookie to client was] の後に次のように示される。
key=abcdef; domain=isc.meiji.ac.jp; path=/; expires=Wed, 19-Jun-2013 13:42:15 GMT
経営学部 経営学科
