2013-03-05 44 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