服务器加载网站每个页面加载 - 会话完整性丢失

时间:2017-01-09 07:08:18

标签: php apache .htaccess session xdebug

要重新评估标题,如果我在浏览器中转到localhost/,页面会按照您的预期加载,加载我尝试投放的任何内容都会按照我的意愿完成,但我注意到了使用 XDEBUG (这只是PHP的调试软件,用于监视调用的函数以及加载的文件)进行调试时的奇怪之处 - 单个加载有两个日志。

他们将整个应用程序加载两次,就好像加载了浏览器请求的页面一样,然后服务器决定第二次加载它,以获得乐趣!

这是我在加载页面时讨论的两个日志文件,使用Webgrind进行分析。

Image of XDEBUG log being managed from WEBGRIND

.favicon是谷歌浏览器试图检索每个加载的图标,我知道这将加载网站第三次,但我使用非法网址管理器阻止应用程序运行时看到URI /favicon.ico的{​​{1}},所以应用程序现在只运行两次。

这是我目前用来操纵网址的.htaccess

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|robots\.txt)

DirectoryIndex index.php
RewriteRule ^(.*)$ index.php?/$1 [L]

我的access.log来自 apache

::1 - - [09/Jan/2017:23:57:27 -0800] "GET / HTTP/1.1" 200 1597 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.51 Safari/537.36"
::1 - - [09/Jan/2017:23:57:28 -0800] "GET / HTTP/1.1" 200 1597 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.51 Safari/537.36"

谢谢!

1 个答案:

答案 0 :(得分:0)

在我完成整个应用程序的调试之后(将SESSION记录器放在index.php页面,然后稍后修改SESSION值并查看所请求的内容),使用我index.php页面上的以下代码:

if (!isset($_SESSION['logs']) $_SESSION['logs'] = [];

array_push($_SESSION['logs'], [
  'ip' => $_SERVER['REMOTE_ADDR'],
  'ua' => $_SERVER['HTTP_USER_AGENT'],
  'uri' => $_SERVER['REQUEST_URI'],
  'tim' => time()
]);

(稍后使用print/echo "<pre>", print_r($_SESSION['logs']) ,"</pre>";查看)

我可以看到除了奇怪的

之外所有的日志都是一样的
'uri' => '/favicon.ico'

表示Google Chrome正在从我的应用中请求favicon.ico,因此我设置了一个临时

if ($_SERVER['REQUEST_URI'] === '/favicon.ico') exit;

只是为了阻止该请求,并尝试将记录器降低到一个应用程序负载。

将请求限制为2(两个localhost/)之后,我查看了我的access.log文件,该文件显示了两个SAME请求,但有一个请求是localhost/和另一个是-- = undefined来记录),所以经过24小时的调试后,我记得我之前查看过的Chrome开发工具显示了所有网络连接;

Chrome开发工具显示两次调用localhost,我觉得这很奇怪,但发起人是jQuery(当时我不知道$.get AJAX请求被计为一个jQuery发起人,所以我忽略了查看它,直到最近我才意识到我在加载页面时加载了一个方法,它将在GET中请求当前的window.location.hash

$.get( window.location.hash.substring(3), function(body) {} );

请求(加载localhost/时)... localhost/,因为页面中没有hash部分。

所有这一切都归结为有自动加载器,但我检查了整个应用程序中的每个img标记和link rel / script标记(200k行代码)。

希望这有助于你们任何人!他花了很多时间来解决这个问题。 (抱歉英语不好,凌晨2点)