记住PHP会话私密浏览

时间:2015-05-27 07:29:23

标签: php session

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

这是我用来查看有人观察是否有人活动超过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上进行查看时,在私密浏览中,每次访问新页面时,都会有新的会话渲染 - 一个我没有看到的问题。

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

有解决方法吗?

修改 我应该注意,这个脚本被放在一个带有标题application/json的php文件中,也可以用作JavaScript文件。

3 个答案:

答案 0 :(得分:10)

如果我们首先查看php session documentation

  

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

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

  

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

现在答案很明确:浏览器没有保存php用于检索相应会话的任何Cookie。

  

有解决方法吗?

即可。 $_SERVER变量包含可被视为唯一的数据。例如,尝试使用REMOTE_ADDR结合来自HTTP_USER_AGENT和CRUD的解析数据(可能是数据库)。

一些额外的信息

答案 1 :(得分:2)

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

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

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

我应该补充说,这有种族的难题(但我没有来源)。

答案 2 :(得分:1)

不幸的是,我无法发表评论,所以我只是在这里发布此链接:

https://panopticlick.eff.org

在此网站上,您可以看到浏览器泄露的所有信息。他们使用Javascript来处理某些数据,但这不应该是一个问题,因为大多数用户都启用了Javascript。