0

是的,这应该很有趣。

我正在开发一个使用 Fusebox 5.5 构建并使用 iFrame 的网站。我最近的任务是将网站转换为 Application.cfc 并将我们用于网站上的谷歌索引的 cookie 设置为 HTTPonly,如下所述:http ://www.petefreitag.com/item/764.cfm 。该应用程序在 CF8 上运行。

我遇到的问题是在用户登录网站后,会话数据是在登录过程之后设置的,然后触发熔断器来加载包含“frame-buster”功能的主页,以打破网站用于登录和加载主页的内部 iframe。执行此操作时,IE 会丢弃会话,并且在加载页面的其余部分时,会进行另一次检查,发现会话丢失并强制重定向回主页。在 IE 中使用时,每个 javascript 重定向都会创建一个新会话。在 Firefox 或 Chrome 中不会出现此问题。

这是 frame-buster 函数,在 body 标签中作为 onLoad 触发:

    function changeParentLocation() 
{
    if (top != self) {
        self.location.href = <cfoutput>"#Application.rootdir#"</cfoutput>;
        top.location.replace(self.location.href);
    }
}

这是 onSessionStart 函数:

<cffunction name='onSessionStart' access='public' returntype='void' output='false'>
    <cfheader name="P3P" value="CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'" />
    <cfheader name="Set-Cookie" value="CFTOKEN=#session.CFTOKEN#;path=.my.sites.subdomain/;HTTPOnly">
    <cfheader name="Set-Cookie" value="CFID=#session.CFID#;path=.my.sites.subdomain/;HTTPOnly">

    <!---<cfcookie name="CFTOKEN" domain=".my.sites.subdomain" value="#Session.CFTOKEN#" />
    <cfcookie name="CFID" domain=".my.sites.subdomain" value="#Session.CFID#" />--->
</cffunction>

如果我注释掉 HTTPOnly cookie 并改用当前注释掉的 CFCookie 代码,IE 不会尝试创建多个会话。

4

1 回答 1

1

如果您将coldfusion 应用程序正确设置为将setClientCookies 设置为false,则不会发生这种情况。它实际上必须是布尔值 false,而不是会转换为 false 的文本值。换句话说:

<cfscript>
    this.name = applicationname;
    this.sessionmanagement = true;
    this.sessiontimeout = '#CreateTimeSpan(0,12,0,0)#';
    this.clientmanagement = true;
    this.setClientCookies = false;
    FUSEBOX_APPLICATION_PATH = '';
</cfscript>

作品。但:

<cfscript>
    this.name = applicationname;
    this.sessionmanagement = 'true';
    this.sessiontimeout = '#CreateTimeSpan(0,12,0,0)#';
    this.clientmanagement = 'true';
    this.setClientCookies = 'false';
    this.specChar = '[!|@|##|$|%|^|&|*|<|>|?|\|/|[|]|{|}|=|~|`|(|)]';
    FUSEBOX_APPLICATION_PATH = '';
</cfscript>

才不是。

于 2011-10-10T16:31:05.920 回答