как мы можем принудительно удалить кеш при входе пользователя в систему с помощью JavaScript - PullRequest
1 голос
/ 27 сентября 2010

Может кто-нибудь сказать мне, как мы можем удалить кеш браузера, используя JavaScript.Я хочу этого, потому что я даю пользователю файл для загрузки с URL ('http://www.example.com/docs/doc1.xlsx')., и эти файлы доступны только для этого конкретного пользователя.

Я проверяю с помощью htaccess перенаправление на другое действие, которое перенаправляет на этот конкретныйURL-адрес файла, если у пользователя нет доступа, то появляется страница «Отказано в доступе».

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

Поэтому я хочу удалить кеш при выходе пользователя из системы.

Альтернативные решения приветствуются.

Ответы [ 4 ]

4 голосов
/ 27 сентября 2010

Короче говоря, вы не можете (или, по крайней мере, я никогда не видел способ сделать это).

Вам нужно будет сделать это на стороне сервера, отправив правильный кэш-перебор заголовков.Что-то вроде:

Cache-Control: no-cache, must-revalidate, max-age=0

Вы можете сделать это, используя (чтобы украсть пример из документации PHP ):

header("Cache-Control: no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
0 голосов
/ 28 сентября 2010

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

Поэтому я еще больше напрягаюсь и нахожу простое решение, устанавливая заголовки в файле .htaccess, который находится в папке, где находятся все загружаемые файлы. Это означает, что заголовок cache-control установлен для загрузки файлов ответа.

Но все же остается одна мысль, почему вышеуказанные решения не работают.

И еще одна вещь, Pragma: "no-cache" не работает для IE. то есть выдает ошибку при загрузке запрошенного файла, так как «запрошенный сайт недоступен или не может быть найден». Так что я установил его на Pragma: public. Но я сомневаюсь, что это безопасно.

0 голосов
/ 27 сентября 2010

Вместо того, чтобы предоставить прямой доступ к файлу (как вы упомянули "http://www.example.com/docs/doc1.xlsx"), Я думаю, что вы должны прочитать файл в php и дать его для загрузки после проверки на действительный пользователь ..

Пример взят из php.net

<?php
// downloading a file
$filename = $_GET['path'];

/**
* YOU CAN CHECK YOUR VALIDATIONS HERE.. 
*
*
*
*/


// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// browser must download file from server instead of cache

// force download dialog
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");

// use the Content-Disposition header to supply a recommended filename and
// force the browser to display the save dialog.
header("Content-Disposition: attachment; filename=".basename($filename).";");

/*
The Content-transfer-encoding header should be binary, since the file will be read
directly from the disk and the raw bytes passed to the downloading computer.
The Content-length header is useful to set for downloads. The browser will be able to
show a progress meter as a file downloads. The content-lenght can be determines by
filesize function returns the size of a file.
*/
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));

@readfile($filename);
exit(0);
?>

Надеюсь, это поможет .. Спасибо ...

0 голосов
/ 27 сентября 2010

Это невозможно.Php работает только на стороне сервера, а использование javascript не работает из-за проблем безопасности.ActiveX, я полагаю, не вариант.

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

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