Coldfusion 9 cfscript cfcookie и cookie (стиль сценария)
Я пытаюсь установить для файлов cookie CFIDE и CFTOKEN только HTTP в Coldfusion 9...
Вот что я попробовал (не ошибся, но не сработал):
cookie.CFID = "#session.cfid#,httpOnly='true'";
cookie.CFTOKEN = "#session.cftoken#,httpOnly='true'";
Я также пытался (не идти... и без ошибок):
cookie.CFID = "#session.cfid#;httpOnly='true'";
cookie.CFTOKEN = "#session.cftoken#;httpOnly='true'";
И это (я думаю, что работает только в CF10):
cookie.CFID = {value="#session.cfid#", httpOnly="true"};
cookie.CFTOKEN = {value="#session.cftoken#", httpOnly="true"};
Тогда это (не ошибка, но не работает):
cookie( name="CFID" value="#session.cfid#" httpOnly="true" );
cookie( name="CFTOKEN" value="#session.cftoken#" httpOnly="true" );
Когда я запускаю их, я выполняю полную перезагрузку кеша в Chrome. Когда страница перезагрузится, я должен увидеть флажки "Показать файлы" в HTTPOnly.
Я, наверное, измотан и мог бы ударить правильную комбинацию из вышеперечисленных вещей, и я получил ложный положительный результат от неудачи, прыгнув вокруг слишком много. Иногда кэшированные вещи получают лучшее из меня.
У меня есть стиль контейнера CFML, но мой Application.cfc - это весь стиль сценария, и я хочу сохранить его таким образом... Так как мне сделать этот стиль сценария в Coldfusion 9?
Заранее спасибо!
Обновление для моего исправления:
Я использовал getPageContex() ниже, но он не работал как есть. Также обработчик события onSessionStart() был изменен для создания session.CFID и session.CFTOKEN с CreateUUID(), который также появился в моем файле Application.cfc. Так что для потомков вот как выглядит этот блок кода.
function onSessionStart(){
getPageContext().getResponse().addHeader("Set-Cookie", "CFID=#session.CFID#;path=/;HTTPOnly");
getPageContext().getResponse().addHeader("Set-Cookie", "CFTOKEN=#session.CFTOKEN#;path=/;HTTPOnly");
}
Другое примечание: по какой-то причине, если сеанс очищается и запрашивается обработчик onsessionstart(), этот набор файлов cookie, описанный выше, завершится неудачно. Должен быть блок try catch или обработка исключений некоторого вида, добавленная для учета проблемы перезагрузки. Лучше всего перейти на исправленную версию Coldfusion 10 (или скоро будет выпущен CF 11).
3 ответа
Вы можете использовать объект PageContext для установки файлов cookie в cfscript:
getPageContext().getResponse().addHeader("Set-Cookie", "CFID=#session.CFID#;path=/;HTTPOnly");
getPageContext().getResponse().addHeader("Set-Cookie", "CFTOKEN=#session.CFTOKEN#;path=/;HTTPOnly");
Для файлов cookie сеанса есть более простой способ.
Включение сеансовых файлов cookie HttpOnly для всего сервера
Обновление ColdFusion 9.0.1 добавило общесерверный параметр для добавления атрибута httponly во все сеансовые файлы cookie, созданные ColdFusion (например, файлы cookie CFID и CFTOKEN или файл cookie JSESSIONID в JRun). Чтобы включить этот параметр, если вы используете установку JRun J2EE или установку на нескольких серверах, вы должны отредактировать jvm.config, в противном случае вы можете включить этот параметр у администратора CF. Если вы работаете с сервером J2EE, отличным от JRun, обратитесь к документации для соответствующей настройки. Серверы J2EE, которые поддерживают спецификацию Servlet 3.0, могут указывать значение true в файле /WEB-INF/web.xml.
http://www.adobe.com/devnet/coldfusion/articles/coldfusion-securing-apps.html
Вы можете использовать этот код в вашем application.cfc внутри функции onsessionstart.
<cfcookie name="CFID" value="#session.cfid#" httponly="true">
<cfcookie name="CFTOKEN" value="#session.cftoken#" httponly="true">
Нет способа установить это внутри cfscripts. cfcookie не поддерживается в форме скрипта в cf9. В настройках приложения есть флаги, добавленные в CF10 для решения этой проблемы, однако CF11 будет иметь полную поддержку в скриптах. К сожалению, я думаю, что вам придется отказаться от единого кода для функциональности. Если у вас нет доступа к вашему CFIDE/ Администратору. Вы можете добавить аргумент Java, чтобы включить его на всем сервере. Добавьте это к вашей конфигурации JVM
-Dcoldfusion.sessioncookie.httponly=true
Все это подробно описано здесь http://www.petefreitag.com/item/764.cfm