2011-10-10 29 views
0
後重定向

呀,這應該很有趣。轉換cookies來的HttpOnly後,IE下降階段來自iFrame的

我正在一棟建於保險絲盒5.5,並使用一個iFrame的站點。 http://www.petefreitag.com/item/764.cfm:我最近與這裏所描述的網站在網站上轉換成的Application.cfc和設置我們使用cookie爲谷歌索引到的HttpOnly任務。該應用程序在CF8上運行。

我遇到的一個用戶登錄到該網站後,會話數據在登錄過程則保險絲被觸發,加載主頁包含一個「框架剋星」功能,打破後設置的問題該網站出於內部iframe用於登錄並加載主頁面。執行此操作時,IE會丟棄會話,並在加載頁面的其餘部分時發生另一個檢查,以發現會話丟失並強制重定向回到主頁。在IE中使用時,每個JavaScript重定向都會創建一個新會話。這個問題在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 cookies和使用代替當前註釋掉的CFCookie代碼,IE不會嘗試創建多個會話。

+0

請將您初始化Application.cfc的設置(例如this.name,this.applicationtimeout等)發佈 - 您正在操作的所有設置。 –

+0

我想通了。見下文。 –

+0

;)我認爲這是關於客戶管理的事情。很高興你想出來了。 –

回答

1

,如果你正確設置你的ColdFusion應用程序最多有setClientCookies是假的不會發生這種情況。它實際上必須是一個布爾型的假,而不是一個文本值,否則將會轉化爲假。換句話說:

<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> 

不。

+0

與原始問題無關,但如果你的「specChar」變量是正則表達式,那麼它不會做你認爲的那樣。你可能想要:'[!@ ## $%^&* <>?\\/\ [\] {} =〜\'()]'(即刪除所有的'|' '和'['和']'字符。) –