Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 组件销毁期间的清理(ColdFusion)_Session_Coldfusion_Cfc - Fatal编程技术网

Session 组件销毁期间的清理(ColdFusion)

Session 组件销毁期间的清理(ColdFusion),session,coldfusion,cfc,Session,Coldfusion,Cfc,我通过putCache() 缓存中的对象有10分钟的超时 这些对象在所有用户之间共享。但是,有2-3个变量取决于用户。 当前,每个对象在用户会话中存储这些依赖于用户的变量 问题: 当组件在10分钟后从缓存中删除时,用户会话中的变量不会被删除。 因此,12分钟后可能会再次创建对象,并将2个新变量写入用户会话 注意:每个对象将在会话作用域中创建一个具有唯一名称的新结构。无法覆盖旧变量,因为新对象不知道前一个对象的结构名 示例:对象是“list.cfc”,可以有20个不同的列表,每个列表存储完全不同的

我通过
putCache()
缓存中的对象有10分钟的超时

这些对象在所有用户之间共享。但是,有2-3个变量取决于用户。 当前,每个对象在用户会话中存储这些依赖于用户的变量

问题:

当组件在10分钟后从缓存中删除时,用户会话中的变量不会被删除。 因此,12分钟后可能会再次创建对象,并将2个新变量写入用户会话
注意:每个对象将在会话作用域中创建一个具有唯一名称的新结构。无法覆盖旧变量,因为新对象不知道前一个对象的结构名

示例:对象是“list.cfc”,可以有20个不同的列表,每个列表存储完全不同的数据。在会话中,我们只存储当前用户的“列表位置”;列表项存储在缓存中,对所有用户都是相同的

我们希望在销毁对象时清除会话变量。如何做到这一点


想法:在php中,我会使用
\uu destruct()
方法,但在ColdFusion中我找不到类似的方法。

当然,最简单的方法是抽象会话变量的命名,以便
可以直接引用它们。听起来你现在有这个:

// in Cache.cfc
// [...]
someVarInTheCache = sessionReference[uniqueKey]
你的物体不知道那把钥匙

你能不能不这样做:

someVarInTheCache = sessionReference.someVarRepresentingTheCache[uniqueKey]

然后,当您终止缓存时,您只需终止会话。someVarRepresentingTheCache
,并且不需要知道密钥。

您是否考虑过将这些对象存储在应用程序或服务器范围内,这样就不必销毁或重新创建它们?@DanBracuk是的,但我们无法更改这一点。有100多个应用程序正在运行(每个应用程序最多有200个会话),每个应用程序都有数千个对象。一个特定模块只使用大约一百个对象,因此当用户更改模块时,我们使用缓存来释放内存