记住PHP会话私密浏览

Bra*_*rad 15 php session

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

这是我用来查看某人是否有人活动超过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'];
            }
        }
Run Code Online (Sandbox Code Playgroud)

当用户从常规浏览器(IE.Chrome Incognito)查看我的页面时,此脚本可以完美运行,但是当他们在iPhone上进行查看时,在私人浏览中,每次访问新页面时,都会呈现新会话 - - 除非另有说明,否则我没有这个问题.

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

这有解决方法吗?

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

sit*_*lge 10

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

访问您网站的访问者被分配了唯一的ID,即所谓的会话ID.这可以存储在用户端的cookie中,也可以在URL中传播.

其次,mozilla支持关于私密浏览的内容(其他浏览器几乎相同)

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

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

这有解决方法吗?

是的.该$_SERVER变量保存可被视为唯一的数据.例如,尝试REMOTE_ADDR结合使用来自HTTP_USER_AGENTCRUD的解析数据(可能是数据库).

一些额外的信息