Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кэширование в новом окне. Как избежать?
 
 автор: Mirn   (14.07.2005 в 15:12)   письмо автору
 
 

У меня на страничке картинки открываются в новом окне с помощью этого скрипта:

<script language="javascript">
<!--
function loadsp(pic,w,h){
if (window.msgWindow) { if (!msgWindow.closed) msgWindow.close ()};


prop="toolbar=no,scrollbars=no,location=no,directories=no,status=no, menubar=no,resizable=no,width="+w+",height="+h;
h=h+200;
msgWindow=window.open("","winpic",prop);
pm="<html><HEAD><META HTTP-EQUIV=\"pragma\" content=\"no-cache\"><META HTTP-EQUIV=\"Expires\" content=\"0\"><META HTTP-EQUIV=\"Cache-Control\" content=\"no-store\", \"no-cache\"></HEAD><body LINK=\"black\" aLINK=\"black\" vLINK=\"black\" bgcolor=\"F0D8B6\" marginheight=\"0\" marginwidth=\"0\" topmargin=\"0\" bottommargin=\"0\" leftmargin=\"0\" rightmargin=\"0\"><center><a href=\"javascript:window.close();\" style=\"text-decoration:none\"><img src="+pic+" alt=\"Закрыть окно\"></a><\center></body></html>";
msgWindow.document.write(pm);
}
//-->
</script>

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

   
 
 автор: cheops   (14.07.2005 в 19:40)   письмо автору
 
   для: Mirn   (14.07.2005 в 15:12)
 

Попробуйте добавить ещё
<META HTTP-EQUIV=\"Expires\" content=\"Mon, 23 May 1995 02:00:00 GMT\">
<META HTTP-EQUIV=\"Cache-Control\" content=\"no-store, no-cache, must-revalidate\">


PS Зайдите также в свойсва обозревателя - общие - параметры - проверять наличие обновления сохранённых страниц и отметте радио-кнопку "При каждом посещении страницы", чтобы определить кто кэширует браузер или сервер.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=260

   
 
 автор: Mirn   (15.07.2005 в 10:31)   письмо автору
 
   для: cheops   (14.07.2005 в 19:40)
 

Поробовал - вставил меты, отметил кнопку - не помогло %(

Причем. Картинки на основной странице не кэшируются, там прописан только no-cache и этого хватает. В открывающихся окнах, я проверил, все мета-тэги на месте.

   
 
 автор: glsv (Дизайнер)   (15.07.2005 в 13:28)   письмо автору
 
   для: Mirn   (15.07.2005 в 10:31)
 

А вы сделайте "финт ушами".
У вас открывается пустое окно

msgWindow=window.open("","winpic",prop);

А пусть открывается какая-нибудь страница. Пусть даже ничего внутри не будет.

msgWindow=window.open("null.html","winpic",prop);

И вы при каждом новом открытии генерируйте уникальную переменную и передавайте ее этой странице в качестве параметра. Для того "ненайденного" субъекта, который кешировал страницу - страница станет уникальной и кеширование должно прекратиться.

var rnd =  Math.random();
msgWindow=window.open("null.html?rnd="+rnd,"winpic",prop);

   
 
 автор: Mirn   (15.07.2005 в 14:33)   письмо автору
 
   для: glsv (Дизайнер)   (15.07.2005 в 13:28)
 

Спасибо! Ща буду пробовать! 8)

   
 
 автор: Mirn   (18.07.2005 в 15:23)   письмо автору
 
   для: glsv (Дизайнер)   (15.07.2005 в 13:28)
 

Не помогло 8(

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

PS: через phpinfo() можно увидеть включено ли кэширование? И если да то где это там пишется?

   
 
 автор: cheops   (18.07.2005 в 19:23)   письмо автору
 
   для: Mirn   (18.07.2005 в 15:23)
 

Нет, через phpinfo() это увидить нельзя - хостеры часто ставять обратный кэширующий сервер на выходе с их локальной сети - чтобы снизить нагрузку на основные сервера и последнее время с очень зверскими правилами кэширования...

   
 
 автор: Mirn   (19.07.2005 в 12:39)   письмо автору
 
   для: cheops   (18.07.2005 в 19:23)
 

>чтобы снизить нагрузку на
>основные сервера и последнее время с очень зверскими
>правилами кэширования...

Позвонили в контору хостера, там сказали что ничего у них не включено, а что кэшируются картинки - странно. Но создалось впечатление, что человек который был на том конце провода либо не уверен в том что он говорит (что "ничего не включено"), либо он не хотел признаваться...

   
 
 автор: Loki   (19.07.2005 в 12:48)   письмо автору
 
   для: Mirn   (19.07.2005 в 12:39)
 

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

   
 
 автор: glsv (Дизайнер)   (19.07.2005 в 05:17)   письмо автору
 
   для: Mirn   (18.07.2005 в 15:23)
 

> Не помогло 8(
Да, у вас же с картинками заморочка… //морщась//
Здесь хуже.

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

<img src="img.php?file=image.jpg&rand="<?= rand() ?>>

Т.е. вместо изображения в тег <img> подставлять PHP-скрипт, который уже и будет выводить изображение. Этому скрипту в качестве параметра передавать имя выводимого изображение и параметр rand для уникальности имени (чтобы кэширования не было).

PS: Вообще ситуация с кэшированием – это как во времени дикого запада – никаких правил. Кэшируют все кто не попадя, всё что попадется и не соблюдая никаких правил. Анархизм какой-то.

   
 
 автор: Mirn   (19.07.2005 в 13:05)   письмо автору
 
   для: glsv (Дизайнер)   (19.07.2005 в 05:17)
 

>Либо можно добиться уникальности имени изображения используя для этого >формирование изображений скриптом.

Пожалуйста, напиши как это сделать, а то я не очень понял :(

<a href="javascript:loadsp('img/up_pics/2_big.jpg',542,400);">
<IMG width=150 border=0 height=102 hspace=0 align=right src="img/up_pics/2.gif" alt="Увеличить" > </a>

Куда мне и что писать?

   
 
 автор: glsv (Дизайнер)   (22.07.2005 в 07:45)   письмо автору
 
   для: Mirn   (19.07.2005 в 13:05)
 

Вам нужно воспользоваться кодом, создающим изображение "на лету". Он приведен теме по ссылке.

И вот этот участок вашего кода нужно преобразовать

<IMG width=150 border=0 height=102 hspace=0 align=right src="img/up_pics/2.gif" alt="Увеличить" > </a>


<IMG width=150 border=0 height=102 hspace=0 align=right src="img.php?file=up_pics/2.gif&rand=<?= rand() ?>" alt="Увеличить" > </a>

В параметр src вместо изображения подставить скрипт
img.php?file=up_pics/2.gif&rand=<?= rand() ?>

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5325&page=1

   
 
 автор: _Mirn   (29.07.2005 в 11:23)   письмо автору
 
   для: glsv (Дизайнер)   (22.07.2005 в 07:45)
 

Огромное спасибо!
Softtime php-форум - the BEST!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования