0

ええ、これは楽しいはずです。

Fusebox 5.5で構築され、iFrameを使用しているサイトで作業しています。私は最近、サイトをApplication.cfcに変換し、サイトのgoogleインデックス作成に使用しているCookieをHTTPonlyに設定するという任務を負いました:http://www.petefreitag.com/item/764.cfm。アプリケーションはCF8で実行されています。

私が直面している問題は、ユーザーがサイトにログインした後、ログインプロセスの後にセッションデータが設定され、ヒューズがトリガーされて、サイトを分割するための「フレームバスター」機能を含むホームページが読み込まれることです。ログインしてメインページをロードするための内部iframe。これが実行されると、IEはセッションをドロップし、ページの残りの部分がロードされると、セッションが欠落していることを検出してホームページへのリダイレクトを強制する別のチェックが発生します。各javascriptリダイレクトは、IEで使用されるときに新しいセッションを作成します。この問題はFirefoxまたはChromeでは発生していません。

これは、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 に答える