2013-03-05 42 views
0

我有一個登錄頁面位於一個域上,而另一個域上有應用程序。當由不同的域發起時,coldfusion會話被丟棄

當我使用來自單獨域的登錄名時,不會爲第二個域存儲會話變量,即使這是創建它們的域。

要清楚,我不是在域之間共享會話

登錄域中運行的應用程序域,其中應用程序創建一個會話變量的腳本。 當在應用程序域內調用重定向時,此變量未被傳輸。

如果我從同一個域調用腳本,會話按預期存儲。有趣的是,直到今天,這工作得很好。也許一些cf設置改變了。

我注意到CFID和CFTOKEN正在被傳遞,是否有可能使用來自引用網站的CFID和CFTOKEN來編寫會話?

如果是的話我該如何防止?

回答

3

您可以通過在設置的Application.cfc覆蓋this.setclientcookies = false默認的會話cookie的行爲,併發出您的cfcookie在的Application.cfc的onSessionStart()

例如

<cfcomponent> 
    <cfset this.sessionmanagement = true> 
    <cfset this.setclientcookies = false> 
    <cffunction name="onSessionStart"> 
     <cfcookie name="CFID" value="#session.cfid#" domain=".subdomain.domain.com"> 
     <cfcookie name="CFTOKEN" value="#session.cftoken#" domain=".subdomain.domain.com"> 
    </cffunction> 
<cfcomponent> 

當你在它,它會是設置httpOnly屬性設置爲true以及一個好主意。

+0

我得到一個錯誤'例程不能被聲明多次.'當我包含cffunction位。和' '還沒有爲我工作:( – Daniel 2013-03-05 22:13:07

+1

您是否在'''AppSrc'文件中聲明瞭'onSessionStart',這就是錯誤的聲音 – Busches 2013-03-05 22:19:39

+0

我使用CFwheels,所以是的,那是:)。我將它添加到正確的位置,但仍然無法正常工作。 – Daniel 2013-03-06 00:25:34