我正在开发一个分析脚本,人们可以将其添加到他们的页面以跟踪访问者数据。我遇到的一个问题是设计一种方法来跟踪个人的 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/