【发布时间】:2014-04-25 20:59:30
【问题描述】:
我正在尝试在 Coldfusion 9 中将我的 cookie CFIDE 和 CFTOKEN 设置为 HTTPOnly...
这是我尝试过的(没有错误但没有用):
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 中执行空缓存硬重新加载。当页面重新加载时,我应该会看到 Resources Cookies HTTPOnly 列显示复选框。
我可能已经筋疲力尽了,可能已经打到了上面的正确组合,但我因为跳得太快而误报了失败。有时缓存的东西会占上风。
我的 CFML 容器样式可以使用,但我的 Application.cfc 是所有脚本样式,我想保持这种样式...那么如何在 Coldfusion 9 中执行此脚本样式?
我的修复更新:
我使用了下面的getPageContex(),但它并没有按原样工作。另外onSessionStart() 事件处理程序更改为使用CreateUUID() 创建session.CFID 和session.CFTOKEN,这在我的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)。
【问题讨论】:
标签: cookies coldfusion coldfusion-9 httponly cookie-httponly