28. februar 2003 - 01:26Der er
15 kommentarer og 2 løsninger
Billede bliver cached, men skal skifte
Jeg har et profilsystem, hvor man kan ændre sit profilbillede. Men efter man har skiftet billedet, så vises det gamle stadig - indtil der manuelt er trykket på refresh i browseren. Hvordan undgås dette?
Problemet er nok at billedet hedder det samme i begge tilfælde, da det gamle billede bare bliver overskrevet. Derfor vil en hentning af ny side naturligvis resultere i hentning af en 100% identisk html-kode. Det eneste der ikke hentes er det nye billede, da browseren bare tror det er samme billede og derfor bruger det gamle billede fra cachen.
Altså gemme billedet på serveren indeholdende f.eks. klokkeslet og dato for at være sikker. Eller evt. genere en unik nøgle på 10 tegn, som sættes foran profilbilledet?
200 point er mange point! prøv at sætte src direkte på billedet. Dette tvinger siden til at hente fra kilden igen <img id="rr" src="henry.jpg"> efter update document.getElementById("rr").src="henry.jpg"
Gem tidspunktet hvor billedet er opdateret, i databasen. Når du viser billedet, sætter du dette tidspunkt efter fil-navnet i img-tag. fx: <img src="billedet.gif?t=<%=rs("billeddato")%>">
Så vil billedet hentes og caches for hver gang billedet ændres.
=maddog= > kan du fortælle mere om hvordan det virker - også med kode? Hvad mener du f.eks. med efter update? Billedet vises jo flere forskellige steder på siden.
OK. I det tilfælde er mortens forslag måske det bedste bud. Ideen var at sætte <script> onload = function() { document.getElementById("rr").src="henry.jpg" } </script> ind, hvor rr og henry.jpg naturligvis er de varible serveren skal sende. ved at sætte src i et javascript Image() objekt tvinges siden til at hente kilden påny. Helt alternativt kunne du overveje at lade serveren sende billedet, i denne stil: <img src="http://www.mycgiserver.com/servlet/maddog.image?file=maddog2.jpg">
sikkert ikke noget. _oImage.src = String burde hente fra url'en påny, men jeg kan selvfølgelig tage fejl. Ellers er mortens forslag (eller mit sidste - det er nemlig rigtig prof da man kan hindre andre i at linke til billedet) måske en bedre løsning.
getpic.asp-filen, som bruger komponenten XMLHTTP fra Microsoft:
<% Dim objXMLHTTP, objXml Set objXml = Server.CreateObject("Microsoft.XMLHTTP") objXml.Open "GET", "fulde sti til filen", False objXml.Send ' Filen får et navn Response.AddHeader "Content-Disposition", "attachment;filename=filnavn.jpg" Response.ContentType = "application/jpg" Response.BinaryWrite objXml.ResponseBody Set objXml = Nothing %>
Med ovenstående kode kan jeg skjule hvorfra filen hentes - også mulighed for at hente fra andre end min egen server.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.