2013-11-01 32 views
0

由于我使用的系统具有登录和注销功能,因此当我登录到系统时,我处于Session内部。我是Session的新手,我的问题是任何变量及其在任何Coldfusion页面中定义的值,我是否可以在任何页面上使用它?Coldfusion中的会话

例如,同时通过我的系统的代码去,我碰到下面的行每一个和每一个CFML页面传来:

<cfparam name="INPUTID" default="0"> 

再后来就某处页面,我已经看到了这个变量像#INPUTId#一样使用。

请澄清

+3

上面的代码与会话无关。它只是设置一个变量的默认值。查看['cfparam'](http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7fd7.html)以及[范围类型](http:// help)上的文档。 adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7ff1.html)。如上所示,非显式变量通常默认放置在'变量'范围内。 – Leigh

+0

我建议最小化会话变量的使用。原因在于,对于现代浏览器,用户可能会以您未预料到的方式更改这些内容。 –

+0

@DanBracuk ColdFusion中的会话变量可能与你所想的不同 –

回答

4

要回答这个问题:“什么变量,它的价值我在任何ColdFusion页定义,我将能够使用它的任何页面上” ......那要看。

如果您设置会话变量,例如<cfset session.foo = "bar" >,那么你可以在任何页面上调用#session.foo#,因为它将存储在用户的会话中。

但是,如果你只是设置一个值,例如<cfset foo="bar" >那么它将在“变量”范围内结束,并且仅在该页面或请求中可用。 (就此而言,CF具有特定的“请求”范围,例如request.foo,这是为了这个目的,在相同请求或页面视图中设置值的位置之后的任何代码中都可用)。

因此,如果您想要设置可在其他页面上使用的值,请使用会话。但要小心,在尝试从用户会话中调用它之前,您还需要使用cfparam来设置默认值,或使用structKeyExists()来检查该值,因为除非已设置该值,否则该值可能不存在。否则,对于在同一页面中使用的值,请使用'请求'范围,或者查看其他范围的CF文档,例如变量,本地等。

+0

嗯,即使我在想,它应该有'session.foo'等东西,但它仍然没有任何东西,它从某处。无论如何,谢谢,我正在计算这里发生了什么,因为我的文件中包含了大量的cfc。再次感谢。 – Jack

+0

通常情况下,某些东西存在并且是空白的。那样你就不必测试存在和非空白 –

+0

另一方面,如果某件事情存在而且不存在,那可能意味着该页面没有以正确的方式被访问并且应该采取适当的行动。 –