1

我想创建一个我可以调用的 UDF,它将模拟以下代码行。目标是终止用户的会话(各种登录数据),同时保留他们的购物车数据。该代码有效,但我还无法获得它的 UDF 版本。有小费吗?

<!--- move cart to temporary variable --->
<cfset temp_cart = arrayToList(session.cart)>

<!--- kill entire session --->
<cfset foo = structclear(session)>

<!--- re-initialize cart --->
<cfset session.cart = ArrayNew(1)>

<!--- move temporary cart back to new session cart --->
<cfset session.cart = listToArray(temp_cart)>

甚至不确定从哪里开始,但到目前为止,这是我搞砸的 UDF:

function LogOut()
    {
  temp_cart = arrayToList(session.cart); 
  foo = structclear(session);
  session.cart = ArrayNew(1);
  session.cart = listToArray(temp_cart);
}
4

1 回答 1

3

就在我们澄清问题所在的同时,您可以对该 UDF 进行一些更改以提高代码质量:

function LogOut(){
    var temp_cart = session.cart;
    structclear(session);
    session.cart = temp_cart;
}

这应该会吹走除购物车之外的所有会话变量。

(我刚刚看到您关于“例程不能多次声明”的新评论)

好的,所以问题不在于您的功能,而在于您如何加载它。您在哪里删除此功能?您显然是在同一请求中多次使用的文件中声明它。你不能把这个函数放在你的 Application.cfc 或 Application.cfm 中吗?或者在确保每个请求只包含一次的 UDF 库中?

你用的是什么版本的CF?

于 2012-09-12T22:08:11.273 回答