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