21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Honzass
Profil
Zdravím,
mohl by mi někdo poradit jak zamezit ukládání obsahu jedné stránky do Temporary?
Mám stránku, do které se načítá flash soubor A.swf. Jelikož se při každém novém načtení generují pro tento soubor různé proměnné, potřebuji, aby se netahal z Temporary, ale aby byl znovu načten přímo ze serveru. Vyzkoušel jsem snad všechny možnosti na zrušení kešování, ale vše bylo bez výsledku. Zde přikládám všechny zatím použité možnosti a to jak META tagy pro HTML tak funkce Header().

<META HTTP-EQUIV="pragma" CONTENT="no-cache"> (v http/1.0)
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> (v http/1.1)
<META HTTP-EQUIV="Expires" CONTENT="Fri, 16 Jun 2000 10:00:00 GMT">
---------------------------------------------------------------------- --
<?
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
?>
---------------------------------------------------------------------- --
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

Jediná možnost, která funguje je změna nastavení "ZJIŠŤOVÁNÍ EXISTENCE NOVĚJŠÍCH ULOŽENÝCH STRÁNEK: PŘI KAŽDÉ NÁVŠTĚVĚ STRÁNKY" v IE v nabídce: Nástroje - Možnosti Internetu... - Obecné - Dočasné soubory Internetu - Nastavení
Nemůžu ale po uživatelích stránek chtít, aby si toto nastavení změnili. Určitě existuje jiný jednodušší způsob - tedy aspoň doufám:-(

Předem díky za odpověď
Honzass
Leo
Profil
A ty hlavicky nastavujete pro webovou stranku nebo pro ten flash soubor? Leo
Yuhů
Profil
Je to trochu složitější. Neexistuje možnost, jak prohlížeči zabránit, aby si objekt uložil do keše. Jediné, co jde, je říci mu, aby uloženou kopii NEPOUŽIL. To je první postulát.

Za druhé -- existují mechanismy, jak prohlížeči říci, že při příštím použití objeku musí zkontrolovat čestvost objektu. To se mu říká pomocí cache-control a zejména pomocí Expires, v zásadě to máte správně. Prohlížeč (obecně klient) pokud usoudí, že objekt nemusí být čerstvý, má poslat na server validační požadavek (který mimochodem vypadá skoro stejně jako první požadavek -- je to if-modified-since).

Internet Explorer (a možná i jiné prohlížeče) přistupuje k problematice trochu jinak -- ve chvíli, kdy se stále domnívá, že trvá stávající session (v praxi nejčastěji trvá až do vypnutí prohlížeče), čerstvost objektů neověřuje, i když podle HTTP standardu musí.

Řešením je randomizace url. Přidejte při volání souoboru k jeho URL nějaký náhodný parametr. Buďto javascriptem nebo PHPkem třeba tak, aby výsledný soubor vypadal takto: soubor.swf?random=43572. Prohlížeč potom nepozná, že se jedná o tentýž objekt, protože příště už bude natahovat třeba soubor.swf?random=83346
Honzass
Profil
RE: Leo - hlavicky nastavuji pro webovou stránku
RE: Yuhů - zkusil jsem to napsat takto:

<?
echo "<PARAM NAME=\"movie\" VALUE=\"" . $mapa_podlazi[0] . "?" . UniqId("") . "\">";
?>

a vygenerovalo mi to:

<PARAM NAME="movie" VALUE="SV_1.swf?4247dc0f8709f">

do temporary se to uložilo jako:
---------------------------------------------------------------------- ---------
| Název | Internetová adresa |
---------------------------------------------------------------------- ---------
| SV_1 | http://... .../SV_1.swf?4247dc0f8709f |
---------------------------------------------------------------------- ---------

a stejně to zase tahá z Temporary původní SWF. Už si opravdu nevím rady :-(
Honzass
Profil
No s politováním jsem zjistil, že ikdyž vymažu soubor z Temporary, tak se i přesto po opětovné otevření (ZPĚT -> VPŘED) načítá znova původní obsah. To znamená, že se ten obsah musí ukládat ještě někam jinam. Ale kam? Jeden velice dobrý článek o kešování jsem našel na

http://www.jakpsatweb.cz/clanky/caching-tutorial-czech-translation.htm l

Bohužel i po přečtení tohoto článku jsem stále na mrtvém bodě.
Fred
Profil
No s politováním jsem zjistil, že ikdyž vymažu soubor z Temporary, tak se i přesto po opětovné otevření (ZPĚT -> VPŘED) načítá znova původní obsah. To se mi stávalo u javy, při změně parametru použitého obrázku v jednom apletu, aplet stále v IE probíhal s předchozím obrázkem, i přesto, že jsem smazal úplně všechny tempy, jediné co pomohlo načtení nového obrázku do apletu byl restart PC. Na to proč se to stávalo jsem nepřišel, mnohem dřív jsem přestal používat javu ;-)
Sam
Profil *
Podobný problém jsem vyřešil tím, že jsem to celé .asp volal s parametrem kterým byl čas např.ve VBS window.navigate("PageName.asp?xy=<%=Now()%>"), je to vlastně stejné jako to navrhuje Yuhů akorát bez té náhodné generace.
Honzass
Profil
Dokonce jsem projel celý disk, jestli někde nenajdu ještě nějakou kopii, ale pořád nic. Jako kdyby si to přímo IE uchovával v nějaké své vnitřní paměti.
Napadla mě akorát jedna věc. Co když je ten soubor SWF stále otevřený (prostě když spustím IE a otevřu nejprve první stránku s několika objekty, odtud se po stisku tlačítka přesměruji na druhou stránku, tak se při otevření této druhé stránky objekty z první stránky nezavřou, ale budou stále otevřené. To znamená, že při návratu zpět se objekty nebudou znova načítat, protože jsou již otevřené(nikoli uložené)). Je to možné?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0