Переменная сеанса не обновляется с новым cfimage - PullRequest
2 голосов
/ 09 сентября 2011

Вот странный, по крайней мере для меня. Я читаю изображение в переменную cf image и сохраняю его как переменную сеанса:

<cfimage action="read" source="myPath/image.jpg" name="myImage" />
<cfset session.image = #myImage# />

Я планирую манипулировать этим изображением в какой-то момент, поэтому я сохраняю его в переменную. В любом случае, тогда я передаю его с помощью cfcontent:

<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm" width="500px" />

из шаблона displayPhoto.cfm:

<cfcontent  variable="#imageGetBlob(session.image)#" />

Вот проблема. После первого вызова отображается первое полученное изображение независимо от того, какое новое изображение ему передано. Я попытался уничтожить переменную сеанса перед тегом cfimage, и я подтвердил, что каждый раз передаю правильную переменную изображения. Единственный способ показать новое изображение - это обновить страницу.

Мне кажется, что cfimage каким-то образом кэширует изображение, и каждый новый вызов к нему не обновляет переменную myImage. Документация CF ничего не говорит об этом, и Google ничего не поднял.

Мысли

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Ваша проблема, вероятно, на стороне клиента. Поскольку URL в вашем теге img не изменяется (... displayPhoto.cfm), ваш браузер не видит, что вы на самом деле указываете на новое изображение, поэтому он продолжает обслуживать изображение, уже находящееся в кэше.

Вы можете попробовать добавить случайный поддельный параметр в конец вашего атрибута src, что-то вроде этого псевдокода:

<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm?somevar=#aUniqueValue#" width="500px" />

Вы можете создать переменную aUniqueValue из генератора случайных чисел или генератора меток времени.

2 голосов
/ 09 сентября 2011

Вы также можете установить заголовки HTTP в displayPhoto.cfm, чтобы запретить браузеру кэшировать содержимое этого URL-адреса.Теоретически, это может быть лучше, так как иначе браузер будет хранить в кэше изображение каждый раз, когда ему дается немного другой URL.это, вероятно, не реальная проблема на настольном компьютере, где кеш большой и не сегментирован по сайту, но мобильный клиент с ограниченным кешем может очищать другой контент, который вы хотите кэшировать.

Если изображение большого размера или одна и та же версия может быть загружена слишком часто, посмотрите на заголовки HTTP, в противном случае вышеприведенный подход подходит (мы используем оба в приложении, над которым я работаю)

...