Как программно очистить кеш браузера?

Я ищу способ программно очистить кеш браузера. Я делаю это, потому что приложение кэширует конфиденциальные данные, и я хотел бы удалить их, когда вы нажимаете "выйти из системы". Это произойдет либо через сервер, либо через JavaScript. Конечно, использование программного обеспечения на внешнем/общедоступном компьютере по-прежнему не рекомендуется, так как существует больше опасностей, таких как регистраторы ключей, которые вы просто не можете победить на уровне программного обеспечения.

Ответ 1

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

$('.button').click(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){

            $('html[manifest=saveappoffline.appcache]').attr('content', '');
                $(this).html(s);
        }
    }); 
});

ПРИМЕЧАНИЕ. Это решение основывается на кэше приложений, который реализован как часть спецификации HTML 5. Для настройки манифеста App Cache также требуется настройка сервера. Он не описывает метод, с помощью которого можно очистить "традиционный" кеш браузера с помощью кода на стороне клиента или на стороне сервера, что почти невозможно сделать.

Ответ 2

Там нет способа браузер позволит вам очистить кеш. Это было бы огромной проблемой безопасности, если бы это было возможно. Это может быть очень легко злоупотребляться - в ту минуту, когда браузер поддерживает такую ​​ "функцию", это будет минута, когда я удалю ее с моего компьютера.

Что вы можете сделать, так это сказать, чтобы он не кэшировал вашу страницу, отправляя соответствующие заголовки или используя эти метатеги:

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

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

Независимо от того, я хотел бы указать, что если вы работаете с конфиденциальными данными, вы должны использовать SSL. Если вы не используете SSL, любой, кто имеет доступ к сети, может обнюхать сетевой трафик и легко видеть, что видит ваш пользователь.

Использование SSL также делает некоторые браузеры не использующими кеширование, если явно не указано. См. этот вопрос.

Ответ 3

Лучше всего создать js файл с именем + хэш с версией, если вам нужно очистить кеш, просто сгенерировать новые файлы с новым хешем, это заставит браузер загружать новые файлы

Ответ 4

используйте сам html. Существует один трюк, который можно использовать. Трюк заключается в том, чтобы добавить параметр/строку в имя файла в теге script и изменить его при изменении файла.

<script src="myfile.js?version=1.0.0"></script>

Браузер интерпретирует всю строку как путь к файлу, даже если что-то происходит после "?" являются параметрами. Итак, wat теперь происходит, когда в следующий раз, когда вы обновите свой файл, просто измените число в теге script на вашем сайте (пример <script src="myfile.js?version=1.0.1"></script>), и каждый пользовательский браузер увидит, что файл изменился и захватил новую копию.

Ответ 5

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

./chrome --enable-benchmarking --enable-net-benchmarking 

В консоли Chrome теперь вы можете сделать следующее:

chrome.benchmarking.clearCache();
chrome.benchmarking.clearHostResolverCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.closeConnections();

Как вы можете сказать из вышеприведенных команд, он не только очищает кеш браузера, но также очищает кеш DNS и закрывает сетевые подключения. Это замечательно, когда вы выполняете бенчмаркинг времени загрузки страницы. Очевидно, вам не нужно использовать их все, если не нужно (например, clearCache() должно быть достаточно, если вам нужно только очистить кеш и не заботиться о кеше и соединениях DNS).

Ответ 6

location.reload(истина); будет перезагружать текущую страницу, игнорируя кеш.
Cache.delete() можно также использовать для новых хромов, firefox и opera.

Ответ 7

Первоначально я пробовал различные программные подходы в моем html, JS, чтобы очистить кеш браузера. Ничего не работает в последнем Chrome.

Наконец, я закончил с .htaccess:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

Протестировано в Chrome, Firefox, Opera

Ссылка: https://wp-mix.com/disable-caching-htaccess/

Ответ 8

Представьте, что файлы .js размещены в /my-site/some/path/ui/js/myfile.js

Таким образом, обычно тег script будет выглядеть так:

<script src="/my-site/some/path/ui/js/myfile.js"></script>

Теперь измените это на:

<script src="/my-site/some/path/ui-1111111111/js/myfile.js"></script>

Теперь, конечно, это не сработает. Чтобы он работал, вам нужно добавить одну или несколько строк в .htaccess Важная строка: (весь .htaccess внизу)

RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]

Итак, что это такое, он вроде как удаляет 1111111111 из пути и ссылается на правильный путь.

Итак, теперь, если вы вносите изменения, вам просто нужно изменить число 1111111111 на любой номер, который вы хотите. И, тем не менее, вы включаете свои файлы, вы можете установить этот номер через метку времени, когда последний файл js файла был изменен. Таким образом, кеш будет работать нормально, если число не изменится. Если он изменится, он будет обслуживать новый файл (ДА ВСЕГДА), потому что браузер получит полный новый URL-адрес и просто считает, что файл настолько новый, что он должен его получить.

Вы можете использовать это для CSS, favicons и того, что когда-либо кэшируется. Для CSS просто так используйте

<link href="#" onclick="location.href='http://my-domain.com/my-site/some/path/ui-1492513798/css/page.css'; return false;" type="text/css" rel="stylesheet">

И это сработает! Простое обновление, простое в обслуживании.

обещанный полный .htaccess

Если у вас еще нет .htaccess, это минимум, который вам нужно:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]
</IfModule>