perlでCookieのあれこれ試してみました

perlでCookie

2016年07月20日Perl サーバー

サイト内のトラッキングや会員ログイン情報などCookie(クッキー)を利用してユーザーを識別するperlプログラムを書く際に1回の処理で(そのページへの1回のロードで)
・何回書き込めるの?
・書き込みと読み込みの両方は、出来るの?
・書き込みと読み込みは、どちらが優先されるの?

感覚的には、理解している物の、実際にやったらどのようになるのだろうか?以前より気になっていましたので実際に調べてみました。

1回のロードで読み書き

perlで下のようなスクリプトを書いて実行してみました。

$TEST="ABCDEFG";
$cookie_name="test";
$cpath="/";
$gmt=任意日数

print "Set-Cookie: $cookie_name=$TEST\; path=$cpath\; expires=$gmt\n";
print $ENV{'HTTP_COOKIE'};

1回目の結果:何も表示されず
2回目の結果:ABCDEFGが表示される

書き込みと読み込みを1回のロード(処理)で行なった場合は「書き込みは出来るけど、書いた最新の値を読み込むことは出来ない」
となりました。

当たり前と言えば当たり前なのですが、実際に一度テストしてみたかったので。

1回のロードで複数回書き込み

1回のロードでCookieが何回書き込みできるのかテスト

for (1..100){
  print "Set-Cookie: $cookie_name=$loop\; path=$cpath\; expires=$gmt\n";
  $loop++;
}

結果は、何回でも書き込みできました。ブラウザの規定値まで書き込めるようです。
ブラウザによってまちまちですがサーバごとに保持できるクッキーの数は、大よそ20個程度です。

クッキー名を同一のした場合は、単純に上書き処理を実行します。

javascriptによる力技

1回のロードで書き込み→その値を参照したい場合の力技です。

print "Set-Cookie: $cookie_name=$TEST\; path=$cpath\; expires=$gmt\n";

<script type="text/javascript">
document.write("javascript<>"+document.cookie);
</script>

perlのSet-Cookieで書き込んでjavascriptのdocument.cookieで読み込んでいます。
この場合は、書き込んだ最新のクッキーをjavascriptより参照できます。
利用用途は、あまり無いと思いますが^^

イメージタグからクッキーを書き込む方法

Cookieを書き込みたいページに以下のタグを記述
渡したい引数を##の部分に記載

○○○.jp/cookie.cgiの中身

$TEST=パラメータidを任意手段で取得
$cookie_name="test";
$cpath="/";
$gmt=任意日数
print "Set-Cookie: $cookie_name=$TEST\; path=$cpath\; expires=$gmt\n";

print "Content-type: image/gif\n\n";

open(IMAGE, 'sample.gif') or die;
binmode(IMAGE);
binmode(STDOUT);
print <IMAGE>;

exit;

この方法を使うとクロスドメインでCookieが書き込めますが、iPhoneのブラウザ等では、デフォルトのCookie設定が厳し目なので処理が無視されたり、エラー表示されます。

また殆どのブラウザーで
httpとhttpsが混在するクロスドメインCookieは、書き込みできません、またはセキリティー関係の警告が表示されてしまいます。

Cookieテンコ盛り

ブラウザによって異なりますが、Cookieを保存できる最大数は大よそ300個程度です。

最近は、1時間ネットサーフィンをしただけで100個以上のクッキーが書き込まれることも珍しくありません。
その殆どが広告関連のクッキーです。
ユーザーがどのようなサイトを見ていてどのようなキーワードで検索しているか?などを解析してよりクリックされやすい広告を表示する、いわゆるパーソナライズド広告です。

また品の悪いサイトでは、クッキーファイルその物に「ユーザー情報」を平文で書き込んでいたりします。
ユーザーが分からない(気付かない)部分なので何でもアリの様相です。

このような品の悪い(低セキュリティ・ファイル数多すぎ)やり方でユーザーのスマホやPCへファイルを書き込んでいるサイトに対して
個人的には、検索ランキングへのシグナルとして導入して欲しいと思う訳です。
googleも検索やGmailなど各所でクッキーを使っていますが、googleではきちんとCookieの取り扱いについてのポリシーを明示しているんですよね。
さすが、と思います。

■この記事について
はてなブックマークに追加  
perlでCookieのあれこれ試してみました
https://ezhp.jp/web/1468972627.html

2016年07月20日
Perl サーバー

コメント

コメントを残す

名前

メールアドレス※メールアドレスが公開されることはありません。

ページのトップへ戻る