有一个奇怪的问题。用户登录后,我将其定价折扣矩阵作为查询分配给会话变量。然后在产品页面上,我根据产品定价组查找它们的折扣。这段代码一直工作良好,并继续为所有用户工作,但这个特别。这就是这个场景。
Login process根据数据库中的一些数据设置此值<cfset SESSION.Vendor.PriceMatrix = #qryPriceMatrix# />
查询数据看起来像这样。所以是两列
| Discount | VendorCategory |
|----------|----------------|
|0.2 | SWIPES |
|0.2 | TANTUS |
|0.2 | TOPCO |
|0.2 | VOODOO |
然后在产品页面上,我简单地像这样查询会话变量
<cfquery name="GetYourPrice" dbtype="query">
SELECT Discount FROM SESSION.Vendor.PriceMatrix
WHERE VendorCategory = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#PricingGroup#" maxlength="20">
</cfquery>
我遇到的问题是,在会话变量的查询之后,它将会话变量中折扣列的所有值设置为0,如下所示。
| Discount | VendorCategory |
|----------|----------------|
|0 | SWIPES |
|0 | TANTUS |
|0 | TOPCO |
|0 | VOODOO |
我不知道为什么或如何发生这种情况,因为我认为为了发生这种情况,我必须设置会话变量,但没有cfset语句。这段代码同样适用于所有其他用户帐户。有人遇到过类似的情况吗?一个会话变量的查询包含一个查询,然后设置第一列为零?
此代码在所有其他用户帐户上运行良好
你百分之百确定吗?很有可能这只是第一次报道这种情况。感觉像是内存泄漏的问题。如果你处理在applicaiton
或session
作用域中缓存的CFCs,是否所有的函数变量local
或var
都作用于它们的函数?
如果有任何代码为查询中的每个VendorDiscount
设置默认值0
,请将0
更改为-1
,并查看这是否是被错误调用的代码。
用户登录系统而不购买任何东西的频率是多少?如果不是经常增加会话内存,那么你的投资回报率就会很低。就我个人而言,我不会隐藏这个折扣列表。我只会查询数据库,并让它在主查询中返回全价、折扣金额和调整后的价格。