Non tutti sanno che quando vediamo un filmato Flash nel browser, quest’ ultimo viene salvato in locale, più precisamente nei file temporanei, al fine di essere prelevato per la visualizzazione.

Ma come evitare la memorizzazione nella cache dei filmati swf?

La cosa che possiamo fare, è quella di far credere al browser, che il filmato flash sulla nostra pagina sia cambiato, aggiungendo al nome del filmato un valore diverso ogni volta che la pagina viene richiesta, facendo credere che sia un file diverso, e non lo stesso con altro nome.

Solitamente, quello che si fa è impostare un valore random, o una data, che ci darà una buona certezza di non fallire.

Vediamo come funziona con diversi linguaggi di programmazione:

  • JavaScript

<script language="JavaScript">
<!--
document.write('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
+' codebase="[...]omissis[...]"'
+' ID=name WIDTH=640 HEIGHT=486>'
+' <PARAM NAME=movie VALUE="filmato.swf?' + new Date().getTime() + '">'
+' <PARAM NAME=loop VALUE=false> <PARAM NAME=bgcolor value=#FFFFFF>'
+' <PARAM NAME=menu VALUE=false> <PARAM NAME=quality value=high>'
+' <EMBED src="filmato.swf?' + new Date().getTime() + '" loop=false '
+' menu=false quality=high bgcolor=#FFFFFF '
+' WIDTH=640 HEIGHT=486 TYPE="application/x-shockwave-flash"'
+' PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">'
+' </EMBED></OBJECT>');
//-->
</script>

  • PHP

<?php
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");
srand((double)microtime()*1000000);
$randval = rand();
?>
.......
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
codebase="[...]omissis[...]"' WIDTH=640 HEIGHT=486>'
<PARAM NAME=movie VALUE="filmato.swf?<?echo $randval;?>">
<PARAM NAME=loop VALUE=false>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<PARAM NAME=menu VALUE=false>
<PARAM NAME=quality VALUE=high>
<EMBED src="filmato.swf?<?echo $randval;?>" loop=false menu=false
quality=high bgcolor=#FFFFFF WIDTH=640 HEIGHT=486
type="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED></OBJECT>

  • ASP

<%@ Language=VBScript Response.CacheControl="no-cache"
Response.AddHeader "Pragma","no-cache"
Response.Expires=0
randomize
rand_n=int(rnd*9999)
%>
.......
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
codebase="[...]omissis[...]"' WIDTH=640 HEIGHT=486>'
<PARAM NAME=movie VALUE="filmato.swf?<%=rand_n%>">
<PARAM NAME=loop VALUE=false>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<PARAM NAME=menu VALUE=false>
<PARAM NAME=quality VALUE=high>
<EMBED src="filmato.swf?<%=rand_n%>" mce_src="filmato.swf?<%=rand_n%>" loop=false menu=false
quality=high bgcolor=#FFFFFF WIDTH=640 HEIGHT=486
type="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED></OBJECT>

Stessa cosa vale per quando si cerca di caricare un file XML, di testo o un filmato.

loadVariables ("file.txt?a="+ random);

Dove random sarà una nostra variabile, preferibilmente di tempo, al fine di non ripetere lo stesso nome

Author

Strategy Director @AQuest ~ Docente Master @NinjAcademy

15 Commenti

  1. Pingback: » Non caricare lo swf dall cache

  2. ciao julius sai se si puo eliminare con uno script quell’odioso riquadro che si vede per poi utilizzare il filmato di flash grazie e complimenti ancora per il blog
    daniela

  3. Julius please puoi mettere apposto che il commento non ha preso il tag per fare vedere il codice…

    Grasie ;-)

  4. Ciao Julius,
    purtroppo il caso mio è leggermente diverso..
    la mia galleria in flash legge un xml che genero dinamicamente in php.. penso che metta in cache entrambe le cose perchè mi restituisce sempre le stesse immagini..
    L’xml viene creato correttamente..
    Ho provato ad inserire i tuoi suggerimenti e su Firefox funziona mentre con explorer 7 no..

    come posso fare?

    Grazie1000!

  5. bè se con ff funziona, ovvero richiami ogni volta un file xml di nome diverso è molto strano che con IE non funzioni…

    assicurati che il file XML sia diverso

  6. purtroppo il nome dell’xml è sempre lo stesso..
    è una galleria in flash generata da un programma e va a leggere un file di nome slides.xml… non saprei come fare a passargli un nome diverso non avendo il .fla

    Grazie1000!

  7. federichissima

    ciao a tutti! come al solito bellissimo tutorial, e come al solito ho una domanda:)
    avendo ad esempio una pagina php basterà copiare lo script che hai postato tu relativo al linguaggio php dopo ?
    grazie a tutti e buona serata!

  8. @federichissima: In pratica nell’esempio PHP vi è un codice da inserire prima dei tag per pubblicare un filmato flash e in seguito nel richiamare il file swf verrà inserita la variabile dinamica generata dal codice precedente in PHP

  9. federichissima

    grazie julius e scusami perchè mi sono resa conto di averti posto male anche la domanda! eheheh non si capisce niente! scusa davvero. comunque ho risolto, ciao e buon weekend!

  10. …io bisogno più o meno dell’esatto contrario.
    Far caricare dei filmati swf nella cache all’apertura di un swf (lasciandoli invisibili fino a quando non accade che si arrivi ad un determinato frame della timeline)
    mI SAPETE AIUTARE?
    pleeeeeasee

  11. Messaggio per l’autore dell’articolo:

    Quello che hai scritto NON è vero.
    Hai scritto che si può evitare la memorizzazione nella cache. Ma questo è impossibile! Qusto codice che hai scritto serve solo a far credere al browser che c’è un nuovo flash. ma questo nuovo flash viene cmq memorizzato tra i file temporanei con un altro nome (molto simile all’originale) per cui ci si può accedere senza problemi.
    Se pensate che così il vostro flash non andrà mai nelle mani degli altri, vi sbagliate!!!

    N.

Commenti