【问题标题】:After converting cookies to HTTPonly, IE drops sessions after redirect from iFrame将 cookie 转换为 HTTPonly 后,IE 从 iFrame 重定向后丢弃会话
【发布时间】:2023-04-01 13:23:01
【问题描述】:

是的,这应该很有趣。

我正在开发一个使用 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 不会尝试创建多个会话。

【问题讨论】:

  • 发布您初始化 Application.cfc 的设置(即 this.name、this.applicationtimeout 等)——请发布您正在操作的所有设置。
  • 我想通了。见下文。
  • ;) 我认为这与客户管理有关。很高兴你明白了。

标签: coldfusion session-cookies httponly


【解决方案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>

没有。

【讨论】:

  • 与原始问题无关,但如果您的“specChar”变量是正则表达式,那么它并没有按照您的想法进行。您可能想要:[!@##$%^&amp;*&lt;&gt;?\\/\[\]{}=~`()](即删除所有 |s 并在 \ [] 字符之前放置反斜杠。)
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 2017-01-01
  • 1970-01-01
  • 2013-03-14
  • 2014-03-31
  • 2013-06-19
相关资源
最近更新 更多