ここまでDMPに関して、特にデータの収集面に関しての概要をまとめてきました。
ここまで来るとだんだん自分でも実装したくなってきます。実装方法は色々あるとは思いますが、CookieSyncを実際に試してみたいと思ったので、ものすごくシンプルな構成でCookieSyncを実装してみました。
構成とシナリオ
構成というほど大したものでは無いですが、以下の構成及びユーザーの動きを想定しました。
構成

- siteA:DMPとCookieSyncを行いたいWebサイト
- ユーザー
- DMP:siteAのCookieSync相手
シナリオ
- siteAにはCookieSync用の1x1pixelの画像を仕込む
- ユーザーがsiteAに来訪
- ユーザーにはsiteAのCookieがセットされる
- siteAからDMPに画像のリクエスト
- DMP側ではリクエストからsiteAのCookieIDを取得してユーザーにDMP側のCookieを発行しつつ、1x1の画像を返す
siteA側
- cidというCookieでユーザーにIDを振る(1000までの乱数)
- DMP.comに対して、/DMP/${cid}.gifという画像をリクエスト
- echoしてる部分はCookieの状態を見るためだけなので適宜無視してください
siteAのページ (index.php)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| <?php
if(!isset($_COOKIE["cid"])) {
echo "このサイトのCookieを保有していない<br /><br />";
echo "Cookieの生成<br />";
$cid = mt_rand(1,1000);
setcookie("cid", $cid);
echo "保有しているCookie : cid = " . $cid . "<br /><br />";
echo "DMP用のクエリストリング生成<br />";
$query_string = $cid;
echo "生成されたクエリストリング : " . $query_string;
} else {
echo "このサイトのCookieを保有している<br />";
echo "保有しているCookie : cid = " . $_COOKIE["cid"] . "<br /><br />";
echo "DMP用のクエリストリング生成<br />";
$query_string = $_COOKIE["cid"];
echo "生成されたクエリストリング : " . $query_string;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Syncのテスト</title>
</head>
<body>
<h1>Cookie Syncのテスト</h1>
<p>1x1ピクセルのダミー画像を呼ぶ例
<img src="http://DMP.com/DMP/<?php echo htmlspecialchars($query_string, ENT_NOQUOTES, 'utf-8') ?>.gif" alt="" width="1" heigth="1"></p>
</body>
</html>
|
DMP側
単純にphpに対してクエリストリング付与して呼び出したり、画像にクエリストリング付与して呼び出すのでもいいのですが、それっぽい感じにするために.htaccessを使います。
- /DMP/にて展開しています
- 画像の置いているディレクトリに.htaccess設置
- 同じ階層に1x1.phpという画像を返すphpを設置
- ${cid}.gifへのリクエストを1x1.php?cid=${cid}にRewrite
- 1x1.phpでは、DMPのCookieの発行(dmpid:1000までの乱数)と、クエリストリングを受け取りマッチング処理
.htaccess1
2
3
| RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.gif$ /DMP/1x1.php?cid=$1
|
${cid}.gifによって実行されるphpプログラム(1x1.php)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <?php
// まだDMP側のIDが振られていないユーザーにCookieを発行
if (!isset($_COOKIE["dmpid"])) {
$dmpid = mt_rand(1, 1000);
setcookie("dmpid", $dmpid);
}
// ここでcidとdmpidをマッチングする処理
// if (isset($_COOKIE["cid"])) {
// hogehoge;
// }
// DBに格納するとか
// 1x1pixelの画像としてのレスポンスを返す
header('Content-Type: image/gif');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
?>
|
実際に動かしてみる
VM2台立ち上げて実験してみました。
- 192.168.80.140 : siteA
- 192.168.80.142 : DMP
に対応しています。
CookieSync前
- 前の処理のCookieIDが画面には残っていますが、ブラウザはCookieを所有していません。

CookieSync後
- siteA(192.168.80.140, cid)とDMP(192.168.80.142, dmpid)の双方のCookie情報がブラウザに存在していることが確認できます。
- DMP側にはcidとdmpidの双方が渡っています。dmpidを持ってCookieSyncを行なってきたユーザーは特定済みなので、その他の提携サイトからdmpidが振られているユーザーが訪れることで、データのカバー率がどんどん向上していきます。

まとめ
非常にシンプルな形ですが、CookieSyncが実現できることを確認しました。実際は大量のリクエストを捌くためのサーバーチューニングや、データの保持に関するアーキテクチャの検討が必要だと思いますが、とりあえず1x1ピクセルの画像を利用すればいいということの確認ができました。
実利用にはJavascriptのタグを置く形で実現することが多いと思いますが、こちらもまた別の機会に試してみたいと思います。
というわけで、しばらく重めの話が続いたので、少し軽めのお話でした。
参考
以下のサイトを参考にしました。