iOS Safari のプライベートブラウズとは

iOS の Safari 設定から「Safariとプライバシーの詳しい情報...」をタップすると以下のように書いてある。

プライベートブラウズをオンにすると、アクセスしたページの履歴や自動入力した情報がSafariに保存されず、開いたタブの情報がiCloudに保存されることもありません。また、Safariから、サイトおよびコンテンツ提供会社(広告会社を含む)にトラッキングしないように求めます。デバイスに情報を保存するWebサイトはそれらの情報を変更できなくなるため、プライベートブラウズをオフにするまでサービスの動作が通常とは異なる場合があります。

注意: プライベートブラウズがオンのときは、Safariのユーザインターフェイスが通常よりも暗くなります。

iPhone 5s + iOS 7 でプライベートブラウズをオンにすると、こんな感じで黒っぽいデザインになる。

プライベートブラウズがオンのときは、Safariのユーザインターフェイスが通常よりも暗くなる

プライベートブラウズがオフのときは白っぽい。

プライベートブラウズがオフのときは白っぽい

タブ選択画面でも黒っぽい。わかりにくいが「プライベート」と書かれているところが少し灰色がかっている。

タブ選択画面でも黒っぽい。わかりにくいが「プライベート」と書かれているところが少し灰色がかっている。

プライベートブラウズがオフのときはタブ選択画面も白っぽい。

プライベートブラウズがオフのときはタブ選択画面も白っぽい

プライベートブラウズかどうかは Do Not Track で判別できる

iOS (iPhone, iPad, iPod touch) の標準ブラウザ Safari でプライベートブラウズをONにすると、HTTPリクエストヘッダに「DNT: 1」が付加される (iOS 6 と iOS 7 で確認済み)。

「DNT: 1」というのは Do Not Track (トラッキングの拒否の意思) をWebサイトに通知するもの。

PHPであればこんなコードで判別できる。


<?php
$DNT = 'HTTP_DNT';
if (isset($_SERVER[$DNT]) && $_SERVER[$DNT] == 1) {
	// DO NOT TRACK enabled
}
else {
	// DO NOT TRACK disabled
}
?>

コードは What is "Do Not Track" and How it Affects Your Website - SitePoint にあったのを拝借した。

また、プライベートブラウズONのときだけではなく、Safariの設定で「追跡しない」をONにしたときにもこのヘッダが付加される。

iOS Safari 設定

そのため、「DNT: 1」が付加されているからといって、プライベートブラウズがONであるとは限らないことに注意。

iOS の Safari 設定から「Safariとプライバシーの詳しい情報...」をタップすると「追跡しない」設定について以下のように書いてある。

Webサイトの中には、コンテンツの提供時にユーザの閲覧動作をトラッキングして、ユーザの好みに合わせた内容を表示するものがあります。Safariでは、サイトおよびコンテンツ提供会社(広告会社を含む)にトラッキングしないように求めることができます。

この設定をオンにすると、Webサイトからコンテンツを取得するときにトラッキング停止の要求が送られます。ただし、その要求に従うかどうかはWebサイトにまかせられます。

そもそも何のためにプライベートブラウズがオンであるかどうかを判断する必要があるのか

iOS5からはSafariにプライベートブラウズという機能が実装されています。プライベートブラウズという機能は、Webページを見るときに閲覧履歴を残さないようにする設定です。クッキーも引き継がれないためか、サイトにログインしたことが別のタブには反映されないようです。

iOS5にしたらSafariの履歴が記録されなくなったと悩んだ人へ - 大人になったら肺呼吸
Safariの場合、プライベートブラウズを有効にするとlocalStorageに書き込めなります

プライベートブラウズを使用中かどうかを高い精度で判別できるブラウザがあるという話 - 金利0無利息キャッシング – キャッシングできます - subtech

プライベートブラウズがオンの場合、タブを閉じたり Safari を終了すると Cookie が削除されるらしいし (詳細は未確認)、 Web Storage の localStorage は一切使えなくなる。

そのため、Web サイトで Cookie や localStorage などを使ってユーザーの状況 (ログインしているか等) を保持するようなことが難しくなる。たとえば、以前に訪問したかどうかの判別などができない。

技術的にできないことがわかれば、それはそれはそれで何らかの対処方法を考えることができる。ユーザーの状況を保持することはできない、という前提で Web サイトを作ることができる。そのため、プライベートブラウズがオンになっているかどうかは判別できたほうがいい。

tags: ios safari php

Posted by NI-Lab. (@nilab)