【问题标题】:ColdFusion Session Variable Gets Wiped out after CFQUERYColdFusion 会话变量在 CFQUERY 之后被清除
【发布时间】:2021-08-31 20:15:29
【问题描述】:

有一个奇怪的问题。用户登录,我将他们的定价折扣矩阵作为查询分配给会话变量。然后在产品页面上,我根据产品定价组查找他们的折扣。此代码一直运行良好,并继续适用于所有用户,尤其是这个用户。所以这就是场景。

登录过程根据数据库中的一些数据设置此设置 <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>

我遇到的问题是在会话变量的这个查询之后立即将会话变量中 Discount 列的所有值设置为 0,就像这样。

| Discount | VendorCategory |
|----------|----------------|
|0         |    SWIPES      |
|0         |    TANTUS      |
|0         |    TOPCO       |
|0         |    VOODOO      |

我不知道为什么或如何发生这种情况,因为我认为为了发生这种情况,我必须设置会话变量,但没有 cfset 语句。同样,此代码在所有其他用户帐户上都可以正常工作。有没有人遇到过类似的事情?会话变量的查询包含一个查询,然后将第一列设置为零?

【问题讨论】:

    标签: coldfusion coldfusion-2016


    【解决方案1】:

    此代码适用于所有其他用户帐户

    您对此 100% 确定吗?很可能这只是第一个被报告的帐户。感觉像是某种内存泄漏问题。如果您正在处理缓存在 applicaitonsession 作用域中的 CFC,是否所有函数变量 localvar 都在它们的函数范围内?

    如果有任何代码为查询中的每个 VendorDiscount 设置默认值 0,请将 0 更改为 -1 并查看是否是错误调用的代码。

    用户登录系统而不购买任何东西的频率如何?如果不是很频繁,那么您添加到会话内存中的投资回报率很小。就个人而言,我不会缓存此折扣列表。我只需查询数据库并让它在主查询中返回全价、折扣金额和调整后的价格。

    【讨论】:

    • 是的,由于范围界定不当,这听起来有点像竞态条件。同意缓存在这里可能也没什么用。
    • 我认为确保这不是问题的唯一方法是将包含折扣的 Session 变量移动到数据库表中。似乎性能将与查询会话变量而不是数据库表非常接近。每个用户只谈论 150 行。
    • 使用数据库查询听起来是更好的选择。但我很好奇,这个用户每次都会发生这种情况吗?前后折扣列的数据类型是什么? Tbh 这是一个延伸,但由于你提到 所有 的值都是 0,我想知道这是否是一个强制转换/截断问题
    • 我看到在使用查询查询时数据发生了奇怪的事情。因此,如果这是原因的一部分,我不会感到惊讶。有一种方法可以提高效率。不要将查询放在会话中,创建一个结构,其中 vendorCategory 是键,折扣是值,然后您可以查看该结构中是否存在键,如果存在则应用它,而不是进行查询查询。
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多