我正在尝试在 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)。