PHP 加载一次页面时, 浏览器请求多次, 导致出错

来源:互联网 发布:android网络框架 编辑:程序博客网 时间:2024/06/05 16:35
问题描述:    在一个项目中, 有一段统计页面浏览次数的代码, 其实现的方式是, 每次页面加载, 就 UPDATE SET 一次, 给数据表中对应的值加一.    碰到的一个问题是, 刷新页面时, 页面的浏览次数诡异的加了2, 而不是正常的加 1. 然后,在控制器中加了如下的调试代码,     以测试当前控制器是否被请求了两次:
     function article_detail() {        ...        $ret_val = $this->session->userdata('ret');        if($ret_val) {            $this->session->set_userdata('ret', $ret_val+1);        } else {           $this->session->set_userdata('ret', 1);        }        $data['session'] = json_encode($this->session->all_userdata());        // 然后, 把数据分配到视图中        ...    }    // 视图中用JS记录数据    console.log(<?=$session?>);
经过测试发现,页面确实被请求了两次. 然后, 注释控制器文件中与测试无关的代码, 缩小检查范围.之后,发现一个现象, 视图的CSS文件和JS文件因为后台没有分配路径需要的前缀(被注释了), 导致找不到文件. console 中记录的ret变量的值增加了很多. 说明: 因为文件找不到, 导致了浏览器向服务器进行了多次的请求!! 最终, 也将问题定位到了:
<link rel="shortcut icon" href="<?=$config['favicon']?>" type="image/x-icon">
原因是: 因为后台没有上传该图片, 所以, <?=$config['favicon']?> 的值为空, 导致浏览器请求了两次!! 所以, 记录页面浏览次数的值也更新了两次!!
此外:     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++    还发现一个问题, 这个只是在 GoogleChrome 下才有这个问题!    而且, 只要在控制器中往页面输出一点东西, 但不能是空白的, Chrome 也正常了 -_-    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++     FireFox 测试时, 没有问题!    另外, 在命令行用 curl 请求页面测试时, 一切正常. 不过, 命令行界面也不需要去接受图片    之类的信息~~   
之前也碰到过一次类似的事情, 就是我的 session 不一致, 服务器传到视图页面中显示时, 始终和服务器端生成的 token 值不一致! 就是因为请求了两次. 当时也是在控制器中输出了一个非空的, 但是在页面中设置为 display:none 才解决的. 当时没时间处理这个问题.....
0 0