php - 记住 PHP session 隐私浏览

标签 php session

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

这是我用来查看是否有人观察某人是否活跃超过 30 分钟的脚本,如果有,将创建一个新 session ,如果没有,则他们将恢复之前的 session 。

        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 之类的设备上查看它时,在隐私浏览中,每次他们访问新页面,新 session 呈现 - 以其他方式查看时我没有遇到的问题。

那么我的问题是,我知道在私有(private)浏览器中查看页面是通过临时缓存实现的,临时缓存会在浏览器关闭后被清除,但是为什么即使浏览器没有关闭,打开一个链接即使链接指向另一个页面,页面上使用相同的脚本,也会破坏他们之前的 session ?

有解决办法吗?

编辑: 我应该注意到,这个脚本被放置在一个带有标题 application/json 的 php 文件中,也被用作 JavaScript 文件。

最佳答案

如果我们先看php session documentation

A visitor accessing your web site is assigned a unique id, the so-called session id. This is either stored in a cookie on the user side or is propagated in the URL.

其次,什么mozilla support谈到隐私浏览(其他浏览器几乎相同)

What does Private Browsing not save? Cookies!

现在答案很明确了:浏览器没有保存 php 用来检索相应 session 的任何 cookie。

Is there a workaround to this?

$_SERVER 变量保存可以被视为唯一的数据。例如,尝试将 REMOTE_ADDR 与来自 HTTP_USER_AGENT 的解析数据结合使用并对其进行增删改查(可能是数据库)。

一些额外的信息

关于php - 记住 PHP session 隐私浏览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30475878/

相关文章:

php - 如何在 PDO 中将查询结果检索为数组?

php - 从存储查询php结果的数组var中获取值单个值

javascript - 将值分配给 3 个输入标签

php - 将大型 Excel 文件插入数据库

php - session_regenerate_id 没有创建新的 session ID

php - 为什么我必须取消所有 session 变量?

php - 将CI 3与HMVC一起使用时无法加载库

php使用pdo简单登录系统问题

security - 如何进行最安全的Websocket认证