记住 PHP 会话隐私浏览

2022-08-31 01:14:54

我正在开发一个分析脚本,人们将能够将其添加到他们的页面中,以便跟踪访问者数据。我遇到的一个问题是设计一种方法来跟踪个人从私人浏览器(即隐身)查看某人页面时的会话。

这是我使用的脚本,用于查看是否有人观察某人是否处于活动状态超过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'];
            }
        }

当用户从常规浏览器(IE.Chrome Incognito),但是,当他们在iPhone之类的东西上查看它时,在私人浏览中,每次他们访问新页面时,都会呈现一个新会话 - 否则我不会遇到这个问题。

所以我的问题是,我知道在私人浏览器中查看页面是通过临时缓存实现的,一旦浏览器关闭,就会清除该缓存,但是为什么即使浏览器没有关闭,打开链接也会破坏他们以前的会话,即使链接指向另一个页面,页面上的脚本相同?

有没有解决方法?

编辑:我应该注意,这个脚本被放置在一个php文件中,其头文件也要用作JavaScript文件。application/json


答案 1

如果我们首先看一下php会话文档

访问您网站的访问者被分配一个唯一的ID,即所谓的会话ID。这要么存储在用户端的Cookie中,要么在URL中传播。

其次,mozilla支持对隐私浏览的看法(对于其他浏览器几乎相同)

隐私浏览不保存什么?饼干!

所以现在答案很清楚:浏览器没有保存php用于检索相应会话的任何cookie。

有没有解决方法?

是的。该变量保存可被视为唯一的数据。例如,尝试与来自和 CRUD(可能是数据库)的解析数据结合使用。$_SERVERREMOTE_ADDRHTTP_USER_AGENT

一些额外的信息


答案 2

如果您使用 ETags,则可以实现这一点。这里有一篇文章描述了它是如何工作的:

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

ETags在浏览器隐身会话中是持久的 - 但是您应该不断更新会话,因为当您关闭窗口并重新打开它时,会话可能会丢失。

我应该补充一点,这存在种族难题(但我没有来源)。


推荐