
Παναγιώτης Καναβός:
Είναι κακή ιδέα να καταργήσεις το caching άνευ λόγου. Αν οι εικόνες όντως αλλάζουν σε κάθε κλήση, καλώς. Αν και δεν μπορώ να φανταστώ γιατί να συμβαίνει κάτι τέτοιο - εκτός και αν φτιάχνεις τη δική σου έκδοση του CAPTCHA. Σε κάθε άλλη περίπτωση θα δημιουργήσεις πολύ μεγάλο φόρτο στο server σου απλά για να ξαναστείλεις τα ίδια δεδομένα. Αν θέλεις όμως να στέλνεις νέες εικόνες όταν αυτές αλλάζουν έχεις διάφορους τρόπους να το πετύχεις.
Καταρχήν, το πρωτόκολλο HTTP επιτρέπει σε μία σελίδα να πει αν και για πόσο πρέπει να μείνει στην Cache είτε του browser είτε των ενδιάμεσων proxy μέσω του Cache-Control header. Αυτόν τον ελέγχεις στο ASP.NET μέσω του OutputCache directive σε επίπεδο σελίδας ή User Control. Δες το Setting the Cachability of a web page για να δεις πως να απενεργοποιήσεις το client caching μέσω του OutputCache.
Η άλλη επιλογή που έχεις είναι να χρησιμοποιήσεις μεν caching αλλά να προκαλείς refresh όταν αλλάζει το περιεχόμενο της σελίδας. Αν οι εικόνες σου βρίσκονται σε κάποιο folder μπορείς να χρησιμοποιήσεις file dependencies για να ξαναδημιουργηθεί η σελίδα μόνο αν αλλάξουν τα συγκεκριμένα αρχεία.
Πίσω από τα dependencies κρύβεται το ETag, ένα HTTP Header το οποίο λέει στον browser ότι τα περιεχόμενα έχουν αλλάξει. Όσο μία σελίδα έχει το ίδιο ETag ο browser δεν χρειάζεται να ξαναφορτώσει τα περιεχόμενα της. Αν το ETag αλλάξει, ο browser θα πρέπει να ξαναφορτώσει τη σελίδα. Μπορείς να επέμβεις άμεσα στο ETag της σελίδας σου μέσω της Response.Cache.SetETag().
Παναγιώτη με μπέρδεψες....
Το πρόβλημα που έχω είναι ότι όταν αλλάζω εικόνες και οι εικόνες έχουν το ίδιο όνομα (έτσι πρέπει να είναι), τότε δεν τις εμφανίζει τις νέες, απλά πρέπει να πατήσω το κουμπί refresh στον IE.
Με την τεχνική
<asp:Image ID="Image1" runat="server"
BackColor="#DDDDDD" Height="60px" Width="80px"
ImageUrl='<%# eval("pic1") & "?id=" & myRandomInteger() %>' />
====
Protected Function myRandomInteger() As String
Dim rdm = Date.Now.Ticks
myRandomInteger = rdm.ToString
End Function
====
διαβάζει πάντα τις νέες εικόνες, σωστά! Το πρόβλημα είναι πως όταν δεν υπάρχει εικόνα στο FileUpload1 τότε σβήνει την εγγραφή από τη ΒΔ.
Το <%@OutputCache Duration="1" VaryByParam="location;count" %> δεν παίζει... Μου ξαναβγάζει τις ίδιες εικόνες. Πρέπει manual να πατήσω refresh button για να δω.
Το file dependencies παίζει όταν είναι ίδιο το όνομα του αρχείου;
Και τέλος το .SetETag(). δεν το πολυκατάλαβα 
Κάθε βοήθεια ή και λίγος κώδικας θα είναι ότι καλύτερο