将cookie转换为HTTPonly后,IE会在从iFrame重定向后删除会话

时间:2011-10-10 16:09:19

标签: coldfusion session-cookies httponly

是的,这应该很有趣。

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

我遇到的问题是在用户登录网站后,会话数据在登录过程之后设置,然后触发保险丝加载主页,其中包含'frame-buster'功能以打破站点内部iframe用于登录并加载主页面。执行此操作时,IE会删除会话,并且当页面的其余部分加载时,会发生另一项检查,发现会话丢失并强制重定向回主页。每个javascript重定向在IE中使用时都会创建一个新会话。 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不会尝试创建多个会话。

1 个答案:

答案 0 :(得分: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>

没有。

相关问题