Coldfusion 9 cfscript cfcookie和cookie(脚本样式)

时间:2014-04-25 20:59:30

标签: cookies coldfusion coldfusion-9 httponly cookie-httponly

我正在尝试将我的cookie CFIDE和CFTOKEN设置为Coldfusion 9中的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)。

3 个答案:

答案 0 :(得分:1)

对于会话Cookie,有一种更简单的方法。

  

启用服务器范围内的HttpOnly会话Cookie

     

ColdFusion 9.0.1更新添加了服务器范围的设置以添加   httponly属性为ColdFusion创建的所有会话cookie(例如   作为CFID和CFTOKEN cookie,或JRun上的JSESSIONID cookie)。至   如果您正在运行JRun J2EE安装,请启用此设置   多服务器安装,你必须编辑jvm.config,否则你可以   从CF管理员启用此设置。如果你正在运行   JRun以外的J2EE服务器请参阅您的文档   适当的设定。支持Servlet 3.0的J2EE服务器   规范可以指定   真正   在/WEB-INF/web.xml文件中。

http://www.adobe.com/devnet/coldfusion/articles/coldfusion-securing-apps.html

答案 1 :(得分:1)

您可以使用PageContext对象在cfscript中设置cookie:

getPageContext().getResponse().addHeader("Set-Cookie", "CFID=#session.CFID#;path=/;HTTPOnly");
getPageContext().getResponse().addHeader("Set-Cookie", "CFTOKEN=#session.CFTOKEN#;path=/;HTTPOnly");

答案 2 :(得分:0)

您可以在onsessionstart函数内的application.cfc中使用此代码。

          <cfcookie name="CFID" value="#session.cfid#" httponly="true">
          <cfcookie name="CFTOKEN" value="#session.cftoken#" httponly="true">

无法在cfscripts中设置此内容。 cf9中的脚本形式不支持cfcookie。在CF10中添加了应用程序设置中的标志来解决此问题,但是,CF11将在脚本内完全支持它。不幸的是,我认为你将不得不放弃统一的功能代码。除非您有权访问您的CFIDE /管理员。您可以添加一个java参数以在服务器范围内打开它。将其添加到您的JVM配置

-Dcoldfusion.sessioncookie.httponly=true

所有这些都在此详述http://www.petefreitag.com/item/764.cfm

相关问题