2017-05-05 109 views
-1

我是一种新的cfml,我试图弄清楚如果把组件中的组件放在应用范围内是好的,如果组件中的所有东西都是var'd。cfc在应用范围内是否安全

我知道的范围由所有用户共享,但如果所有的变量都var倒是在功能会阻碍人们看到每个人的数据和/或竞争条件?

谢谢

+2

取决于组件的功能。如果组件真的*无状态*将它们存储在共享范围内是安全的。无状态组件/函数a)不存储来自先前请求的任何信息,并且b)给出特定参数,总是返回相同的结果。只要无状态cfc中的所有变量都是局部范围的,就不存在竞争条件的可能性。将*有状态*组件存储在共享范围内是不安全的。这可能会导致各种意外和怪异的结果[由于竞争条件](http://stackoverflow.com/search?q=%5Bcfusionfusion%5D%20race%20conditions)。 – Leigh

+0

你可以给我们一些关于这些功能是什么的想法吗?你试图达到什么目标? –

+0

我主要只是想知道如果用用户信息存储说用户功能将是安全的。我想我试图弄清楚什么是安全的,什么是安全的。 – brian

回答

1

如果存储在组件中的数据属于整个应用程序,例如,一些页面布局数据,可以将它存储在应用程序范围内。

而且,如果组件无国籍,即在它所有的变量都在局部范围内,它是安全的,从它在该范围内创建存储对象。

虽然如果组件是状态,也就是说,它存储从在它之前的请求或用户特定数据的数据,它是安全地从它在应用范围上创建的存储对象,因为这可能会导致数据泄漏以及由于race conditions或访问不正确而导致的其他意外和不想要的结果。
在这种情况下,您应该将组件存储在会话范围中。

+1

@brian - 一些可能不明显的区别:1)* RE:属于整个应用程序*数据是只读还是读写也是相关的。诸如“在线用户总数”等应用程序级数据可以存储在应用程序范围内,但仍需要锁定以避免竞争状况。 2)* RE:其中的所有变量都在本地范围内*字面意思是所有变量。如果您忘记将一个读写变量作为“var”作用域,它将以CFC的“变量”范围结束,这实质上就是该特定情况下的应用程序范围。 – Leigh

+1

...所以答案是“这取决于”。如前所述,提供有关您的功能的更多详细信息会很有帮助,因此我们可以提供更具体的建议。 – Leigh

+0

@Leigh我认为阅读读写区别是我感谢您的帮助,让我的头在附近。 – brian

相关问题