Newsgroup: it.comp.www.asp
Titolo: SOLO IE5 rifiuta response.expires??!!??

Scusate se il post doveste risultare duplicato, ma la cosa e' importante:
C'e' nessuno che ha avuto problemi di caching con IE5 versione italiana???
O oggi ho preso una cantonata megagalattica o su 2 PC su 2 con installato
IE5 tutte le combinazioni provate di response.expires=0
response.ExpiresAbsolute=now() response.buffer=true non sono riuscito ad
imporre ad IE5 di non cachare la mia pagina asp. Visto che un pezzo di sito
funziona con una paginetta redirector che spara da una parte o da un'altra
in base ad alcune cosette: tutto il sito risulta inutilizzabile con IE5!!!
Ancora non ho investigato su come eventualmente risolvere il problema
configurando il client, preferirei che ora qualcuno mi desse dell'imb*** e
mi dicesse: ma perche' non hai fatto cosi'.... ed hai provato cosa'...? etc
etc
Vi prego ditemi che ho preso una svista!!!
Almeno confermatemi che sono l'unico a cui capita!
Avete dato uno sgurdo alle vostre pagine con response.expires=0 attraverso
IE5???? Funzionano???
Grazie, Fabio Zed Zamparelli

Non e' una FAQ, non sto chiedendo come si usa il response.expires (almeno
penso), sto chiedendo perche' non funziona se sul client c'e' IE5 Ita (senza
nessun proxy per lo mezzo).
Mi spiego meglio cosi' mi potrete confermare che a voi continua a funzionare
tutto bene e che sono io che sono uno sfigato, ma il problema nasce in una
situazione che penso possa interessare molti:
Nelle vostre applicazioni non vi serve mai che quando dopo aver visto una
pagina asp, aver clickato ed averne vista un'altra volete che se l'utente
preme il classico bottone BACK la prima pagina asp venga rielaborata?
Le due situazioni tipo che mi vengono in mente sono:
* Pagina con banner di advertising, sceglie un link e va su un'altra, preme
back e rivede lo stesso banner senza che il vostro server sia minimamente
informato di cio' (la pagina se la prende dalla cache e quindi l'asp non
viene rieseguito e l'eventuale contabilizzazione non viene eseguita).
* La mia situazione: l'utente clicka clicka clicka ed arriva ad un pagina
dinamica che lo redirige (via javascript) ad un determinato url. Si da il
caso che sia un pdf. Parte il plug-in acrobat, il pdf viene correttamente
visualizzato, ma l'utente si trova in un vicolo cieco... nessun link per
proseguire (e' un pdf). Poco male: preme BACK.
Nel mio sito la pagina che lo aveva rediretto verso il pdf fino a ieri
veniva rieseguita, si accorgeva (una bella var session e via) che aveva gia'
rediretto l'utente verso il pdf e lo redirigeva verso altri lidi.
Problemino: se questo caz** di IE5 si tiene in cache il giro precedente
della pagina redirector non la riesegue e l'utente rimbalza tra
redirector.asp (non rieseguito) -> file.pdf BACK
redirector.asp (non rieseguito) -> file.pdf BACK
redirector.asp (non rieseguito) -> file.pdf BACK
etc etc etc
RIPETO: nessuna combinazione (almeno a me sembra) di response.expires=0
response.expiresAbsolute Response.Buffer=true etc etc sembra funzionare.
AGGIUNGO: una delle nuove caratteristiche di IE5 e' proprio una nuova
tecnica "intelligente" con cui gestisce la cache, quindi forse non sono del
tutto rinco.
SPERO: che qualcuno di voi controlli la corretta riesecuzione a seguito
della pressione di un BACK in un IE5 Ita di una pagina asp cosi' che io
capisca che e' lato server che posso agire in qualche altro modo
La questione sembra importante (IE5 pare di serie su Win98 secon edition)
affrontiamola!
Ciao, Fabio Zed Zamparelli (che spera di essere sempre l'unico pirl* e di
sbagliarsi di grosso)


^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
Moderatore di it.comp.www.asp
Gruppo di supporto: 
http://www.asp-it.com
^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
iPoint Network 
http://www.ipoint2000.net
 Servizi, siti ed altro!
Personalizza le tue notizie con 
http://www.ipoint2000.net/now

 dovrebbe essere logico.
Non mi ero spiegato bene, nel post successivo in questo thread chiarisco la
situazione e ribadisco che e' un problema di IE5, col 4 tutto funge.
Nella chiamata alla pagina incriminata ci sono proprio una serie di
parametri passati con il form get e quindi il ? c'e'
(http://................./core/redirector.asp?strURL=http://................
../core/dir68508/Summary.txt). Il problema nasce quando l'utente preme il
famoso bottone BACK e richiama ancora la pagina, fino ad IE4 con il
response. expires=0 l'effetto era che la pagina veniva nuovamente
rielaborata, da IE5 no!
Comunque grazie, ero in trepidante attesa che qualcuno mi desse segni di
vita. Se il thread comincia ad animarsi spero che il problema si risolvera'
(o che si dimostrera' inesistente).
Ciao, Fabio Zed Zamparelli

So che non centra molto col thread ma cos'e' sto "response.expires"
e dove si setta ? Sul server ? Su IIS ?
Grazie
Appena avrň risposta farň anch'io una prova e vi saprň dire.
Ciao


Si setta all'inizio della pagina asp e dice al browser client: guarda che
sta' pagina non te la devi tenere in cache. Purtroppo come da oggetto di
questo thread, con il bottone back se torni con IE5 su una pagina con
response.expires=0 se la prende ugualmente dalla cache.
Ciao, Fabio Zed Zamparelli

...

l'ho testato anche io e purtroppo è così...
disperato per gli effetti disastrosi che può avere tutto ciò (il 60% circa
degli utenti di ASP-it usa IE5....) mi sono messo un po' al lavoro. Non ho
ancora cercato su 
msdn.microsoft.com
, ma lo farò appena posso.
In pratica non c'è verso di fargli ricaricare la pagina premendo su bakc.
Preciso che l'incoveniente si verifica solo usando il pulsante back o
forward. In pratica se uno fa un click su un link che corrisponde ad una
pagina che scade subito, funziona tutto, ricaricando i vari dati.
Ho provato ad impostare in qualsiasi modo le proprietà di IE, ma da quanto
ho capito dipende dalla innovativa (?) cache di IE5, che decide che per
risparmiare risorse è meglio non ricontattare il sito web.
Speriamo che esca presto un SP, altrimenti non abbiamo molta strada da
fare...
In ogni caso, mi sono messo al lavoro, e mischiando un po' di ASP e di
Javascript ho fatto questo.
In pratica solo avendo IE5 e chiedendo di fare il refresh della pagina
impostando una variabile di nome ricarica su true prima di includere questo
codice nella pagina, si obbliga IE5 a ricaricare la pagina.
In pratica controllo quando è stata caricata la pagina in cache, e nel caso
sia stata caricata da più di 8 secondi, la ricarica semplicemente.
L'avvenuta ricarica è confermata dall'orario che viene mostrato sulla
pagina, che viene preso dal server, per cui può essere aggiornato solo ed
esclusivamente se viene ricaricata la pagina.
La versione allegata qui sotto è quella di debug, per cui mostra
informazioni tramite gli alert. Se decidete di implementarla, dovete
eliminarli. Fatemi sapere se vi funziona e sopratutto se vi piace ;-)))
--- INIZIO CODICE ---
<%
ricarica=true ' da impostare nella pagina che richiama questo include
Set Browser=Server.CreateObject("MSWC.BrowserType")
brows=(Browser.browser&Browser.version)
Set browser=Null
if LCase(brows)="ie5.0" and ricarica then
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
// bug fix per il caching con IE5
// Copyright 1999 Daniele Bochicchio
// per l'uso è necessario lascaire questo commento
// ASP-it.com soluzioni per ASP 
http://www.asp-it.com
function bugIE5() {
var objDate = new Date();
var tempo;
tempo=objDate.getHours() + ":" + objDate.getMinutes() + ":" +
objDate.getSeconds();
        if('<%
               Response.Write ( Hour(Now()) & ":" & Minute(Now()) & ":" &
Second(Now()) )
             %>'==tempo) {
alert ('Prova');
         }else{
         var secondi=objDate.getSeconds();
         secondi=secondi-<%=Second(Now())%>;
         if (secondi<0) {secondi=secondi*(-1);}
          if (secondi>8) {
                                 alert('redirect in corso');
                                  location.reload();
             }                    }
         }
}
-->
</SCRIPT><%
end if
%>
<body <%
if LCase(brows)="ie5.0" and ricarica then Response.Write("
onLoad=""bugIE5();"")
%>>
<%=Time()%>
</body>
---- FINE CODICE ----


 fare...
Concordo, anche se sto studiando un poco meglio la nuova cache, in effetti
lato client forse si puo' tentare qualcosina. La questione innovativa per
quanto riguarda il caching e' comunque che si possono settare le proprieta'
di expires dei singoli pezzi di codice html di una pagina (per esempio un
gif lo posso ricaricare ogni volta e tutti gli altri elementi della pagina
prendrli dalla cache). Il problemino nasce con il back!!! Tentero' tra
qualche giorno documentandomi un pococ meglio, visto che nel frattempo e'
piu' urgente finire di mettere appunto una soluzione (che parzialmente
diventa client side ;-( e chi l'avrebbe mai detto che M$ mi avrebbe
costretto a risolvere a botte di javascript) che mi risolva la questione.
A tal proposito: mica poi mi accorgo che un codice lato client non e'
rieseguito quando ci si torna con il back?
Sto pensando ad uno script lato client che ricontrolla un cookie ed esegue
un reload, tutto lato client in javascript.....
.... Ops ma e' proprio quello che leggo sotto!!!! GRAZIE!!!!!! il mio
javascript e' decisamente povero!!!!
GRAZIE! GRAZIE! GRAZIE! testero' il codice al piu' presto e ti faro' sapere.
Daniele... sei grande.
Ciao, Fabio Zed Zamparelli

 wrote in message
7jml8d$c2o$1...@springfield.eden.it...
...................

Ho dato uno sguardo al codice, non lo ho ancora provato, ma dal basso della
mia scarsissima conoscenza di Javascript chiedo:
Tu esegui un confronto tra il risultato dell'elaborazione asp che poi lascia
una HH:MM:SS nel codice Javascript da confrontare con una var tempo riempita
dinamicamente dal client che esegue lo script. Immagino potrebbero nascere
problemi se la var tempo e' come penso riempita con l'orologio di sistema
del client (mentre l'asp in questo caso lascia HH:MM:SS del server). La
soluzione potrebbe essere o usare un'istrizione che prenda l'ora dal client
anche nell'asp (mi pare che tra le varie cose che asp poteva chiedere al
client c'era il valore dell'orologio di sitema, ma non ricordo, dovrei
controllare) oppure andare a controllare ed eventualmente riempire un cookie
con l'ora dell'ultima volta che la pagina e' stata caricata, naturalmente
gestito client side con javascript, altrimenti siamo punto e da capo se ci
proviamo dal server.
Il client potrebbe infatti trovarsi in una zona geografica distante del
server ed due orologi cosi' incongruenti inficerebbero il corretto
funzionamento della tua soluzione (perlaltro ottima).
Ciao e grazie ancora, Fabio Zed Zamparelli

 %>
Ciao, ho provato ma ricevo della var brows "Netscape4.00" che non è il mio
browser di default.
Ho guardato il file browscap.ini e di explorer 5 nemmeno l'ombra.
Mi sfugge qualcosa (devo aggiornare il file ini)?
Cmq ho forzato la riga if LCase(brows)="Netscape4.00" and ricarica then
ottenendo risultato negativo!
Ciao
Paolo Napolitano

 proviamo dal server.
Pare che me la fossi sognata la possibilita' di chiedere nelle properties
della session l'ora del client all'ultima richiesta http.
Rimane forse ipotizzabile il settaggio di una variabile cookie in cui
conservare l'ultima HH:MM:SS dell'ultima volta che il file asp e' stato
rieseguito, se non erro il settaggio si potrebbe inserire prila del
location.reload() nello stesso ramo if.
Ciao, e speriamo di riuscire ad assestare una bella procedurina, perche' se
anche uscisse un SP per IE5 non potrei costringere gli utenti a caricarselo
tutti (almeno che non fosse proprio indispensabile).
Ancora grazie, Fabio Zed Zamparelli

E se invece facessimo una cosa del genere:
Da asp settiamo un cookie (con nome univoco per pagina) in cui diciamo che
e' stata eseguita con l'asp, magari inserendo un valore: "ASPED"
Nel codice javascript controlliamo il valore del cookie andando a
riaccedervi (lato client questa volta, quindi con un controllo indipendente
dall'asp).
Se troviamo che il cookie vale "ASPED" allora semplicemente lo risettiamo a
"JAVASCRIPTED"
Se lo troviamo a "JAVASCRIPTED" vuol dire che all'ultimo giro la pagina asp
non e' stata rieseguita e quindi operiamo il RELOAD.
Se il controllo dei cookie e'  rieseguito sempre quando scritto in
Javascript la cosa dovrebbe funzionare e non ci dovrebbe essere da impazzire
appresso agli orologi di sistema.
Rispolvero il mio Teach Yoursef Javascript in 21 YEARS e vi faccio sapere
quando ho del codice funzionante.
Ciao, Fabio Zed Zamparelli
P.S. Per chiunque voglia accelerare buttando giu' un poco di codice, se ci
riuscite postate il codice perche' in 21 YEAR, tempo necessario a me per
scrivere senza bug queste 3 righette di codice ;-) saremo gia ad IE27

Mi sfugge qualcosa (devo aggiornare il file ini)?
Si!
Non ricordo esattamente l'indirizzo da cui si puo' scaricare, comunque se
cerchi browsercap su qualche motore di ricerca, qualcosa trovi di sicuro
Ciao
Stefano

Avevo preparato una paginetta asp, ma non riesco proprio a far funzionare le
due funzioncine di Netscape per la scrittura e la lettura dei cookie lato
client.
Posto il codice, se qualcuno comprende dove sbaglio nelle chiamate delle
funzioni.... GRAZIE.
Ciao, Fabio Zed Zamparelli
---------inizio file testie5bug.asp---------
<%
ricarica=true
NomeUnivocoCookieASP="nomepagina"
TitoloPagina="titolo da dare alla pagina"
'Set Browser=Server.CreateObject("MSWC.BrowserType")
'brows=(Browser.browser&Browser.version)
'Set browser=Null
brows="ie5.0" 'giusto per testare il codice su qualunque browser
if LCase(brows)="ie5.0" and ricarica then
' setta il cookie al valore ASPED
Response.cookies(NomeUnivocoCookieASP) = "ASPED"
%>
<html>
<head>
<title><%Response.Write(TitoloPagina)%></title>
<script LANGUAGE="JavaScript">
<!--
// bug fix per il caching con IE5
// Copyright 1999 Daniele Bochicchio & Fabio Zed Zamparelli
// In collaborazione con
// ASP-it.com soluzioni per ASP 
http://www.asp-it.com
// Per le funzioni di lettura e scrittura un grazie
// alla Netscape per il codice reso pubblico
// 
http://developer.netscape.com/docs/examples/javascript/cookies/
function ReadCookie (CookieName) {
  var CookieString = document.cookie;
  var CookieSet = CookieString.split (';');
  var SetSize = CookieSet.length;
  var CookiePieces
  var ReturnValue = "";
  var x = 0;
  for (x = 0; ((x < SetSize) && (ReturnValue == "")); x++) {
    CookiePieces = CookieSet[x].split ('=');
    if (CookiePieces[0].substring (0,1) == ' ') {
      CookiePieces[0] = CookiePieces[0].substring (1,
CookiePieces[0].length);
    }
    if (CookiePieces[0] == CookieName) {
      ReturnValue = CookiePieces[1];
    }
  }
}
function WriteCookie (cookieName, cookieValue, expiry)
{
var expDate = new Date();
if(expiry)
{
expDate.setTime (expDate.getTime() + expiry);
    document.cookie = cookieName + "=" + escape (cookieValue) + "; expires="
+ expDate.toGMTString();
    }
    else
    {
        document.cookie = cookieName + "=" + escape (cookieValue);
 }
}
function bugIE5(nomecookie) {
    alert (ReadCookie(nomecookie));
    if(ReadCookie(nomecookie) == 'ASPED') {
        alert ('Ho trovato ASPED ed inserito JSCRIPTED');
   WriteCookie(nomecookie, 'JSCRIPTED', (1000 * 60 * 60 * 24 * 1));
    }
    else{
   alert ('Ho trovato JSCRIPTED, Reload In Corso');
   alert ('Qui dovrei eseguire il reload, ma se lo faccio e lo script non
funge entro in loop');
    }
}
-->
</script>
<%
else
Response.Write("<html>"&"<head>"&"<title>"&TitoloPagina&"</title>")
end if%>
</head>
<body
<%if LCase(brows)="ie5.0" and ricarica then Response.Write("
onLoad=""bugIE5('"&NomeUnivocoCookieASP&"');""")
%>>
<%Response.Write(LCase(brows))%>
</body>
</html>
---------fine file testie5bug.asp---------

Riguardo al problema di IE5 mi e' venuto un dubbio: avete provato ad andare
nell'HTTP Headers di una delle pagine incriminate e provare a mettere la
scelta di expire immediato?
Sicuramente non e' sistema molto pratico, fra l'altro richiede l'accesso
alla console dell'IIS, pero' se funzionasse si potrebbe creare una directory
virtuale, impostargli quel flag e mettere in quella directory tutti i file
che si vuole che non vengano riletti dalla cache locale.
Io purtroppo non ho IE5 (appartengo al gruppo di persone che aspettano
almeno il service pack 3 prima di installare nuovi prodotti Microsoft,
specie per internet) e quindi non posso provare, ma mi avete incuriosito e
mi piacerebbe sapere se questo metodo funziona.
Giorgio Leonardi

ottenendo risultato negativo!
prima di tutto devi impostare ricarica=true.
L'ho fatto perchè io uso degli include per più di 300 pagine, per cui mi è
più comodo impostare in ognuna a quanto deve andare l'expires. Quindi se
imposto nella mia pagina ricarica=true, con IE5 mi esegue lo script.
Prova e funzionerà (su ASP-it.com è giù implementato).
In ogni caso gli aggiornamenti del browscap.ini (che contiene le definizioni
dei browser) li trovi a partire da 
http://www.asp-it.com/tools/browscap.ini


funzionamento della tua soluzione (perlaltro ottima).
allora, ci vuole un tantino di "industrializzazione" in più, ma il risultato
è garantito lo stesso ;-)))
avevo detto che si trattava di una versione grezza, giusto per far capire
che e come si poteva fare.
Fortuna che JS supporta anche un metodo per ricavare il fuso orario (in
Italia ora sarà -2, in quanto abbiamo l'ora legale, che è due ore avanti
l'ora zero).
Un articolo col codice aggiornato con queste ultime novità lo trovi su
http://www.asp-it.com/articoli/ie5bug.asp
E con questo siamo a posto. Moltiplicate questo codice e siate fecondi ;-)))
A parte gli scherzi, mi merito un caffè da tutti voi o no? ;-D
Ora il passo è far presente a chi di dovere di questo bug, perchè è lecito
usare script di questo tipo, ma è pur sempre un qualcosa di arrangiato...
cmq, tutto è bene quel che finisce bene... :-))))))


tutti (almeno che non fosse proprio indispensabile).
proprio per questo ho cercato una soluzione alernativa... in ogni caso è un
metodo utile su qualsiasi browser su cui si siano riscontrati capricci con
la cache. Che io sappia solo IE5 versione definitiva italiana ha questo
problema. Con NS4.x mai avuto, stessa cosa per IE4.x. Non so Opera, ma non
mi interessa più di tanto visto che i visitatori dei miei siti solo al 150%
IE-NS. ;-)


funzioni.... GRAZIE.
c'erano alcuni errori nel codice JS (anche in una funzione per leggere i
cookies di NS!), l'ho corretto, aggiustato e come detto postato su
http://www.asp-it.com/articoli/IE5bug.asp
