fsaとmofのcookieを見てみよう

まずfsaのhomepageのcookieを見ます。

demm, googleばっかりです。
fsa独自のcookieも二つ入ってます。Googleもそうですが、基本的にvalueはユーザーから内容がわからないように、ハッシュ化されているのが多いですね。
BIGipServerA001196H_pool_slbI-02_01_ID:rd91o00000000000000000000ffff0a…
TS01ae376f:014f516a6ea5ce940c534e3bb5808ade….

GA1.1.200404109.1517112693 / www.google.com
GA1.2-2.200404109.1517112693 / .google.com
GA1.2-2.426192819.1523353449 /.google.com

mof
incap_ses_401_722416:I2WKAZ4/DlWv7G2g4qSQBbS7zFoAAAAA….
visid_incap_722416:QjYdd8F2RvONoF++EeRMYrS7zFoAAAAAQUIPAA…
visid_incap_886080:kuTi+mCFSWeAQ5lvb4C97e4crVoAAAA….
visid_incap_886084:5NObfd2aTTOLV41lgsGKjel4p….
keyとvalueを見ただけだと、何に使われているかはわかりません。visitに関係してそう、ぐらい。

GA1.3.1869344694.1521294575 / .mof.go.jp
GA1.1.200404109.1517112693 / www.google.com

GAの値を見ると、googleで発行しているgaタグは、fsa,mofともにvalueが同じです。

2つのコンポーネントが一般にクライアントIDと呼ばれているGoogleアナリティクスのプラットフォームにおいてユーザーを一意に特定するために使われている文字列

GA1.2-2.200404109.1517112693 の場合だと、
GA1:バージョン番号。将来Cookieの採番方式などが変わった時に、バージョン番号が上がり、旧バージョンからアップグレードされる。
2:このCookieが紐付いているドメインに関する情報
-2:このCookieが紐づいているパスに関する情報
200404109:ランダムな数字の文字列
1517112693:初回訪問のタイムスタンプ

では、mofのjsを見てみましょう。インデントをつけて見やすくします。

<script type="text/javascript">
	var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-23450482-1']);
	_gaq.push(['_trackPageview']);
	(function() {
		var ga = document.createElement('script'); 
		ga.type = 'text/javascript';
		ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();
</script>

ん?

googleのcookieを解読する

google.co.jpでsetされるcookieを見てみたい。

と思ったら全く分からないので、Googleのドキュメントを先に読んでみよう。
https://policies.google.com/technologies/types

>お住まいの地域を記憶することで、ウェブサイトに地域の天気予報や交通情報を表示することができます。

なに!? おい、いきなりかよ。ふざけてますね。

>NID Cookie には、Google がユーザーの設定やその他の情報を記憶するのに使用する固有の ID が含まれます。記憶される情報には、ユーザーが選択した言語(たとえば英語)、ユーザーが 1 ページあたりに表示したい検索結果数(10、20 など)の設定、Google のセーフサーチ フィルタのオン / オフといった情報などがあります。

まじかよ!?
NIDは2つ入っています。
1. NID 127=RASBLTX__yDZrm9CC……
.gstatic.com 2018-10-09T02:11:21.013Z
2. NID 127=yiliHW1r-Yfr1NUQjvE0UlnO9PjN……
2018-10-07T09:41:22.364Z

>「SID」と「HSID」という名前の Cookie を使用しています。これらの Cookie には、ユーザーの Google アカウント ID や、直近のログイン時刻が、デジタル署名され、暗号化されたレコードとして含まれています。Google は、この 2 つの Cookie を組み合わせることによって、ユーザーがウェブページ上で入力したフォームの内容を盗もうとする試みなど、多くの種類の攻撃をブロックすることができます。

3.SID 8gXaSOKMsnPz_Eywsv….2020-03-30T13:39:47.177Z
4.SSID AkNhgwBjTvblt… 2020-03-30T13:39:47.177Z
5.HSID AgbwaP…. 2020-03-30T13:39:47.177Z

>Google の使用している「lbcs」と呼ばれる Cookie によって、Google ドキュメントでは 1 つのブラウザで多くのドキュメントを開くことができます。

これはgoogle topにはありませんね。

>NID、SID などの Cookie を使用して、Google 検索などの Google サービスに表示される広告のカスタマイズを行っています。たとえば、このような Cookie を使用して最近の検索、広告主の広告や検索結果に対するこれまでの反応、広告主のウェブサイトへのアクセスを保存しています。これにより、カスタマイズされた広告を Google 上でユーザーに表示することができます。

あれ、SIDって、アカウントIDでは?

また Google は、ウェブで配信する広告にも一つまたは複数の Cookie を使用しています。Google 以外のサイトの場合、主な広告 Cookie の一つは「IDE」という名前であり、ブラウザで doubleclick.net ドメインの下に保存されます。google.comには別のCookieが保存され、ANIDという名前となっています。Google では他にも、DSID、FLC、AID、TAID、exchange_uid といった名前の Cookie も使用しています。YouTube などの他の Google サービスも、こうした Cookie を使用してより関連性の高い広告を表示する場合があります。

IDEもANIDもgoogle.co.jpではセットされていません。が、ここは今回のテーマであります。

Google では「AID」や「DSID」、「TAID」という Cookie も使用します。これらの Cookie は、ユーザーが別の端末で Google アカウントにログイン済みの場合に端末間でユーザーのアクティビティをリンクするために使うものです。Google はこのように Cookie を利用して、各端末でユーザーに表示される広告を調整したり、コンバージョン イベントを測定したりします。

結論、cookieは超絶重要!ってことはわかったが、具体的にはどういうことだ?
cookieのvalueをサーバー側で持っておいて、ユーザーが訪問してきたら、setされたcookieを読み込んで、サーバー側で処理しているってことか?

重要そうなところを見ると、

>最近の検索、広告主の広告や検索結果に対するこれまでの反応、広告主のウェブサイトへのアクセスを保存しています。これにより、カスタマイズされた広告を Google 上でユーザーに表示することができます。

cookieのvalueと挙動を全部保存している、ってことか?

cookieの種類も沢山あるので、cookieごとに一つ一つ分割して考えていった方が早そうですね。。あーなんかショックだわー。しかし、これテーマが大きくて、どっから手を付けていいかいまいち良くわかりませんね。。一番馴染みのある”_ga”からいきましょうか。

Python Set-Cookie

Set-Cookie: name=steve; Domain=www.rddit.com; Path=/

domain is restricted wwww.

Third party set cookie such as google analytics
ad network also set cookie

Set-Cookie: user=123; Expire= Ture, 1 Jan
"session" cookie = no Expire

session cookie delete when close the browser.

def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        visits = self.request.cookies.get('visits', 0)
        if visits.isdigit();
            visits = int(visits) + 1
        else:
            visits = 0
        self.response.headers.add_header('Set-Cookie', 'visits=%s' % visits)
        if visits > 100:
            self.write("you are the best ever")
        else:
            self.write("you've been here %s times!" % visits)

write document.cookie in console.
we can rewrite cookie.

document.cookie
"wordpress_test_cookie=WP+Cookie+check; wp-settings-1=editor%3Dhtml%26libraryContent%3Dbrowse%26imgsize%3Dmedium; wp-settings-time-1=1482994300; _ga=GA1.2.511761152.1479929467"
document.cookie="wp-settings-tims-1=1482994301"
"wp-settings-tims-1=1482994301"