是的,这应该很有趣。
我正在使用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不会尝试创建多个会话。
答案 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>
没有。