Avatar billede left Nybegynder
28. februar 2003 - 01:26 Der 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.
Avatar billede keysersoze Ekspert
28. februar 2003 - 01:29 #1
jeg har selv leget lidt med dette - og nogle gange hjælper det at sætte siden til no-cache... men ikke altid.

Derfor plejer jeg at indsætte noget unikt i billedets navn - fx klokkeslet;

filnavn012657.gif
Avatar billede pelkjaer Nybegynder
28. februar 2003 - 01:53 #2
Du kan vel bare returnere med location.reload(true) ?
Avatar billede left Nybegynder
28. februar 2003 - 01:57 #3
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?
Avatar billede left Nybegynder
28. februar 2003 - 01:57 #4
pelkjaer > hvad mener du?
Avatar billede =maddog= Nybegynder
28. februar 2003 - 02:46 #5
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"
Avatar billede mortrr Praktikant
28. februar 2003 - 02:48 #6
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.

- Morten
Avatar billede left Nybegynder
28. februar 2003 - 05:22 #7
=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.
Avatar billede =maddog= Nybegynder
28. februar 2003 - 05:55 #8
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">
Avatar billede left Nybegynder
28. februar 2003 - 06:23 #9
=maddog= >

Min kode ser nu ud som følgende:

<script>
onload = function() {
document.getElementById("rr").src="1.jpg"
}
</script>

<html>

<head>
<title>Ny side 1</title>
</head>

<body>
<p><a href="index.asp">Reload</a><br></p>
<img id="rr" src="1.jpg">

</body>

</html>

Men hvad laver jeg forkert?
Avatar billede =maddog= Nybegynder
28. februar 2003 - 06:33 #10
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.
Avatar billede left Nybegynder
28. februar 2003 - 07:07 #11
Jeg løste lige problemet selv - løsning:

Koden til profilsiden, hvor billedet vises:

<html><body>
<img src="getpic.asp">
<p><a href="index.asp">Reload</a></p>
</body></html>

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.

Hvor mange points vil I have for ulejligheden?
Avatar billede left Nybegynder
28. februar 2003 - 07:12 #12
Desuden er det rigtige filnavn skjult og kan erstattes af alt muligt andet :-)
Avatar billede =maddog= Nybegynder
28. februar 2003 - 07:16 #13
burde jeg ikke lægge et svar. det var jo egentlig mit forslag!!
Avatar billede left Nybegynder
28. februar 2003 - 07:26 #14
det var det jeg mente
Avatar billede =maddog= Nybegynder
28. februar 2003 - 07:49 #15
altså jeg er ikke point grisk. bare giv mig hvad der svarer til hvor glad du er over at problemet er løst.
Avatar billede left Nybegynder
28. februar 2003 - 07:50 #16
Håber det er ok med dig jeg deler pointene lige mellem os 2, da jeg måske brugte dele af dit forslag, men alligevel skrev koden.

Tak for hjælpen :-)
Avatar billede =maddog= Nybegynder
28. februar 2003 - 07:56 #17
Det er mere end fair.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester