Проблема с обновлениями PHP-приложений из-за кеша браузера - PullRequest
1 голос
/ 11 октября 2010

У нас есть приложение на PHP. Проблема возникает, когда мы делаем обновления и изменения в этом приложении. Иногда пользователи не получают последнюю версию приложения (HTML и javascript в основном изменены) из-за кеша браузера. Как только мы поняли об этом, мы смогли включить следующий код в наше приложение (мы выполняем его перед отправкой любого HTML-кода в браузер)

function clean_cache(){
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
    header("Cache: no-cache");
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
}   

Но все же у нас есть пользователи, у которых есть старые версии нашего приложения. Мы читаем, что возможным решением является использование javascript, запрашивающего сервер через ajax, если есть обновление. Если это так, принудительно перезагрузите. Если это лучший способ решить нашу проблему: Как мы можем реализовать это решение? Если у вас есть какое-либо другое возможное решение, мы будем очень рады его узнать.

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

IE кэширует файлы с одного и того же URL, допустим, вы загружаете js-файлы из заголовка html, вы можете попытаться рандомизировать номер запроса в URL, просто чтобы IE интерпретировал его как новый URL и перезагрузилit.

Пример:

<?php 
    $random = rand(1, 100000);

?>
<head>
<script type="javascript/text" src="../js/foo.js?v=<?php echo $random;?>"></script>
</head>
...

Будет выведено что-то вроде

<script type="javascript/text" src="../js/foo.js?v=5"></script>

, если вы убедитесь, что URL-адрес является "динамическим", IE будет вынужден перезагрузить его.

0 голосов
/ 11 октября 2010

сохраняет последнее обновление в переменной и использует ajax для выполнения ajax-запроса каждую минуту и ​​для проверки, отличается ли время обновления от сохраненного времени обновления в переменной.если это так, выполните перезагрузку с помощью window.location = "новое местоположение";

РЕДАКТИРОВАТЬ:

это должно выглядеть так: (но я не проверял это, поэтому я не гарантируючтобы это работало)

var updateTime = '<?php echo $lastUpdateTime;?>';
$(document).laod(function(){
    var reload = window.setInterval("request()", 60000);
});

function request(){
    $.get("last_update.php", function(data){
        if(updateTime != date) window.location = "redirect_to.php";
    });
}

РЕДАКТИРОВАТЬ 2: Это HTML для включения jquery:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 

это "redirect_to.php" файл, в который вы перенаправляете окно.поэтому, если вы хотите остаться на том же сайте, просто поместите URL-адрес этого сайта.

<?php $lastUpdateTime;?> был немного неправильным встроенным PHP.я исправил это до <?php echo $lastUpdateTime;?>

last_update.php это просто страница, которая возвращает последнее обновление.как вы отслеживаете последнее обновление, зависит от вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...