Служащие пользователям кэшированные страницы учетных записей других пользователей - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть скрипт PHP, который включает в себя пользовательскую панель.Внутри этой пользовательской панели есть некоторая информация, такая как их данные, остаток на счете, элементы, назначенные для их учетной записи.

При просмотре пользовательской панели иногда вам будет случайным образом отображаться страница учетной записи другого пользователя, но при обновлении она будетвернись к своей.

Первоначально я думал, что происходит какое-то повреждение сеанса PHP, но я начал регистрировать все запросы (IP-запросчик + идентификатор пользователя).Исходя из этого, я смог определить, что PHP никогда не запускается при случайном / случайном обслуживании страницы другого пользователя.(Никогда не было записи журнала с моего IP-адреса для «случайной» учетной записи, которая была обнаружена)

Сайт использует cloudflare, хотя я добавил правило страницы, чтобы отключить кэширование для всей клиентской области.

Я добавил это, которое выводится для каждого запроса, сделанного в клиентской области:

session_cache_limiter('private_no_expire:');
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

В моем файле htaccess я использую mod_expires со следующим:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType text/html "access 0 seconds"
ExpiresDefault "access 1 month"
</IfModule>

ВНа данный момент я абсолютно не знаю, что еще я могу сделать, чтобы интернет-провайдеры / Cloudflare не обслуживали кэшированную версию.

Есть ли у кого-нибудь какие-либо идеи относительно того, что может привести к тому, что кешированная версия страниц моей пользовательской панели будет показана пользователям?

Ниже приведены заголовки ответа от случая, когда это произошло.

HTTP/2.0 200 OK
date: Wed, 27 Feb 2019 21:03:30 GMT
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
expires: Sat, 26 Jul 1997 05:00:00 GMT
pragma: no-cache
last-modified: Wed, 27 Feb 2019 21:03:29 GMT
vary: Accept-Encoding
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-nginx-cache-status: HIT
x-server-powered-by: Engintron
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 4afd99361e6e3b14-YVR
content-encoding: br
X-Firefox-Spdy: h2

1 Ответ

0 голосов
/ 01 марта 2019

Оказалось, что проблема была в микрокешировании Nginx.

Добавил это и исправил проблему:

if ($host ~ "portal.domain.com") {
    set $CACHE_BYPASS_FOR_DYNAMIC 1;
    set $CACHE_BYPASS_FOR_STATIC 1;
}
...