Я пытаюсь настроить сайт так, чтобы пользователи имели доступ только к своим собственным изображениям и аудиофайлам.Для этого я использую переменные в URL, такие как:
<img src="/public/get_file.php?type=image&file=pic001.png" />
В клиентской части я использую React JS (не уверен, что это важно для этой проблемы).Но на серверной стороне PHP-скрипт проверит, что пользователь вошел в систему (просто проверив простую переменную SESSION), и найдет этот файл в каталоге данных пользователя (на основе идентификатора пользователя в его переменной SESSION).Если он существует, он вернет его пользователю с помощью XSendFile.
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда пользователь пытается получить доступ к файлам, перед загрузкой происходит некоторая задержка.Это говорит мне о том, что они, вероятно, не кэшируются браузером.
Почему файлы не кэшируются?Связано ли это с параметром URL или использованием PHP / XSendFile?
Что я могу сделать, чтобы разрешить кэширование моих файлов (изображений / аудио)?
Обновление
В соответствии с моей просьбой, мой get_file.php:
<?php
session_start();
if (empty($_SESSION['auth']['id'])){
exit;
}
require_once("../../api_modules/settings.php");
$developer_id = $_SESSION['auth']['id'];
$type = preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['type']);
$file = preg_replace('/[^-a-zA-Z0-9_\.]/', '', $_GET['file']);
$file = preg_replace('/[\.]{2,}/', '', $file);
$project_id = preg_replace('/[^0-9]/', '', $_GET['project_id']);
$developer_id = preg_replace('/[^0-9]/', '', $developer_id);
if ($type == "image")
$file = FILEPATH ."files/$developer_id/$project_id/images/thumbs/88x88/$file";
else if ($type == "full_image")
$file = FILEPATH ."files/$developer_id/$project_id/images/originals/$file";
else if ($type == "audio"){
$file = FILEPATH ."files/$developer_id/$project_id/audio/$file";
}
else {
exit;
}
header("X-Sendfile: $file");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($file) . '"');