Подтвердить что ты не робот

Вспоминая приватный просмотр сеанса PHP

Я разрабатываю аналитику script, которую люди смогут добавить на свою страницу, чтобы отслеживать данные посетителей. Одна из проблем, с которыми я столкнулась, - это способ отслеживания отдельных сеансов, когда они просматривают какую-то страницу из частного браузера (I.e. Incognito).

Это script, который я использую, чтобы посмотреть, будет ли кто-нибудь наблюдать, если кто-то был активным более 30 минут, если они есть, будет создан новый сеанс, если нет, то они возобновят предыдущий сессии.

        session_start();
        $max_time = 1800;
        $current  = time();
        if (!isset ($_SESSION['Stationary'])){
            $_SESSION['Stationary'] = time();
            $session = $_SESSION['Stationary'];
        }
        if (!isset ($_SESSION['Inactive'])) { 
            $_SESSION['Inactive'] = time();
        } else {
            $session_life = $current - $_SESSION['Inactive'] ;
            if ($session_life > $max_time ) {
                session_destroy();
                session_start();
                $_SESSION['Inactive'] = time();
                $_SESSION['Stationary'] = time();
                $session = $_SESSION['Stationary'];
            } else {
                $_SESSION['Inactive'] = time();
                $session = $_SESSION['Stationary'];
            }
        }

Этот script работает безупречно, когда пользователь просматривает мою страницу из обычного браузера (IE. Chrome Incognito), однако, когда они просматривают ее на iPhone, в режиме частного просмотра, каждый раз, когда они обращаются к новой странице, создается новый сеанс - проблема, которую у меня нет, если смотреть иначе.

Итак, теперь мой вопрос: я знаю, что просмотр страниц в частном браузере достигается за счет временного кэширования, который очищается после закрытия браузера, однако почему это происходит, даже когда браузер не закрыт, открывая ссылку уничтожает их предыдущую сессию, даже когда ссылка ведет на другую страницу с тем же script на странице?

Есть ли обходной путь к этому?

EDIT: Я должен отметить, что этот script помещается в php файл с заголовком application/json, который также будет использоваться как файл JavaScript.

4b9b3361

Ответ 1

Если мы сначала рассмотрим документацию php сессии

Посетителю, обращающемуся к вашему веб-сайту, присваивается уникальный идентификатор, так называемый идентификатор сеанса. Это либо сохраняется в файле cookie на стороне пользователя, либо распространяется в URL-адресе.

Во-вторых, что поддержка mozilla говорит о приватном просмотре (почти то же самое для других браузеров)

Что не сохраняет частный просмотр? Печенье!

Итак, теперь ответ ясен: браузер не сохраняет файлы cookie, которые используются php, чтобы получить соответствующий сеанс.

Есть ли обходной путь к этому?

Да. Переменная $_SERVER содержит данные, которые можно считать уникальными. Например, попробуйте использовать REMOTE_ADDR в сочетании с анализируемыми данными из HTTP_USER_AGENT и CRUD it (база данных, возможно).

Дополнительная информация

Ответ 2

Этого можно добиться, если вы используете ETags. Здесь есть статья, в которой описывается, как она работает:

http://lucb1e.com/rp/cookielesscookies/

ETags постоянны в сеансах браузера инкогнито - однако вы должны постоянно обновлять сеанс, поскольку он может быть потерян при закрытии окна и повторном открытии.

Я должен добавить, что с этим существуют этнические головоломки (но у меня нет источника).

Ответ 3

К сожалению, я не могу комментировать, поэтому я просто разместил эту ссылку здесь:

https://panopticlick.eff.org

На этом сайте вы можете увидеть всю информацию, которая просочилась в ваш браузер. Они используют Javascript для некоторых данных, но это не должно быть проблемой, так как в большинстве случаев Javascript включен.