为什么 ColdFusion SESSION 变量在前几行被引用后会“未定义”?

2024-04-16

在 Windows2003/IIS6 上运行 ColdFusion 8.01 Standard

应用程序.cfc:

<cfcomponent output="false">
    <cfscript>
        THIS.SessionManagement = "Yes";
        THIS.SessionTimeout = CreateTimeSpan(0, 3, 0, 0);
        THIS.ApplicationTimeout = CreateTimeSpan(0, 8, 0, 0);
    </cfscript>

    <cffunction name="onRequestStart" returnType="Boolean" output="false">
        <cfargument name="targetPage" type="string" required="true">

        <cfscript>
            if  (!StructKeyExists(SESSION, "User"))
                SESSION.User = CreateObject("component", "cfc.User");
        </cfscript>
    </cffunction>
</cfcomponent>

模板文件伪代码示例:

    LOCAL.qItems =
        CreateObject(
                "component",
                "cfc.Items"
                ).setUser(SESSION.User).getItems();

    for (i=1; i<=LOCAL.qItems.RECORDCOUNT; i++) {
        LOCAL.Item =
            CreateObject(
                "component",
                "cfc.Item"
                ).setUser(
                    SESSION.User
                    ).setId(LOCAL.qItems["Sku"][i]);
    }

SESSION.User 设置(如果尚未定义)onRequestStart() of Application.cfc。上面的代码在模板文件中运行。第二个参考SESSION.User消息抛出异常Element USER is undefined in SESSION.

为什么要在几行之前定义 SESSION.User (不抛出异常),然后在几行之后(几毫秒内)抛出此异常?

在我的应用程序的不同模板中,这种情况可能每天都会发生一次。

我怎样才能防止这种情况发生?


这很可能是线程安全问题,代码中的其他内容清除了会话范围或将 NULL 分配给SESSION.User.

我建议这样做,因为您似乎没有本地声明i在您的循环中,因此该代码不是线程安全的 - 因此您的代码中的其他地方可能会出现类似的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 ColdFusion SESSION 变量在前几行被引用后会“未定义”? 的相关文章

  • ColdFusion UI 标签到 jQuery 的转换

    我正在尝试将一些具有各种 ColdFusion UI 标签的代码转换为 jQuery 我必须制定一个迁移计划 目前这就是我所拥有的 Tag Replacement CFApplet CFCalendar http jqueryui com
  • ColdFusion Twitter API 错误请求

    我正在开展一个项目 涉及抓取 Twitter 数据信息 解析它并将其显示在我们的网站上以用于管理目的 我们还在考虑通过与 Twitter REST API 联锁的 Web 界面发布推文或更新 但首先 我想做简单的 GET 我正在尝试通过 d
  • Web API 2 会话

    我无法从 web api 2 中获取会话数据 我已经验证 cookie 是在 fiddler 中发送的 我知道 Web api 2 的最佳实践是无状态 但由于项目的要求 现在有必要是全状态的 我已经尝试过这个链接 WebAPI 2 属性路由
  • 如何从 java 类(在 Lucee 中)中的方法返回 Coldfusion 结构?

    我正在编写一个java类 并且想从方法返回一个coldfusion结构 结构扩展了映射和其他东西 我不是 Java 程序员 所以我不知道如何解决这个问题 这是 lucee java 文档 http javadoc lucee org 当我尝
  • 我什么时候应该在 ColdFusion 中使用#?

    这是教授新人 ColdFusion 的最大障碍之一 何时使用 充其量是不明确的 由于使用它们通常不会产生问题 因此大多数人似乎倾向于过度使用它们 那么 基本规则是什么 我认为说哪里不使用 可能更容易 唯一的地方是在 cfif 语句和 cfs
  • Java:如何创建 HTTP 浏览会话

    我正在尝试创建一个向服务器发送一些 POST 请求的 Java 应用程序 第一个请求是带有身份验证信息的请求 然后 当我发送下一个请求时 我得到的答案是我的会话已过期 但我在同一秒内发送下一个请求 所以它不能超时 所以我猜想 Java 中有
  • PHP mail() 中的空 $_POST

    对于以下方面的一些帮助将不胜感激 我已经在网络和 stackoverflow 上搜索了几个小时 我的php邮件功能有这个问题 我的网站上有一个表单 该网站使用 WordPress 其中包含两个文本字段 姓名和电话号码 表单中还有一个隐藏字段
  • Rails 会话中存储的对象变成了字符串?

    通常我不会在 Rails 会话中存储对象 但我正在使用需要此功能的库 我遇到了一个非常奇怪的问题 其中存储的对象在重定向后显示为字符串 为了重现 我创建了一个示例 Rails 4 1 应用程序 rails new session test
  • 当 EnableSessionState 为 ReadOnly 时更改会话状态

    我有一个 旧的 ASP NET WebForms 项目 并且我想尽可能将 EnableSessionState 设置为 ReadOnly 以防止会话锁阻止单个用户并发页面加载 在某些页面上 我实际上确实想写入会话状态 通常 只需将那些需要写
  • 扩展 ASP.NET 应用程序

    这是一个非常广泛的问题 但希望我能得到有用的提示 目前我有一个在单个服务器上运行的 ASP NET 应用程序 我现在需要进行扩展以适应不断增加的客户负载 所以我的计划是 1 将 ASP NET 和 Web 组件扩展到五台服务器上 2 将数据
  • “location.reload()”丢失 POST/SESSION 数据? (F5 / Ctrl+R 保留数据?)

    我想创建一个按钮来重新加载页面而不丢失 POST数据和 SESSION 在网上 我找到了这段代码 onclick document location reload 这是我的按钮的代码 a class button href style fo
  • 在 Codeigniter 中将数组保存到会话

    我在 Codeigniter 中将数组保存到会话数据时遇到问题 var dump this gt session gt userdata data output is boolean false array array 0 gt abc 1
  • ColdFusion 参数化查询

    我运行一个查询来填充我试图参数化的 CFChart
  • ExpressJS 设置/获取/使用 cookie

    无法获取请求中设置的 cookie 我设置我的cookie response cookie name My name 我想以这种方式获取我的cookie 它以前工作过 但我更改了快速配置 我不知道现在似乎是什么问题 request cook
  • 在 ColdFusion 中,如何显式引用 Application.cfc 中定义的“THIS”范围?

    有没有办法显式引用 Application cfc 中定义的 THIS 范围 假设我有一个像这样的 Application cfc component this name MyApplication 我知道从网站的任何页面 您都可以通过这种
  • Magento - 检查管理员和客户是否登录

    我有一个安装了 Magento 1 4 0 1 的 Web 服务器 我有另一个与之共享凭据的网站 我已经设法检查客户是否登录 在更改 Magento 中的 cookie 位置之后 但是当我还尝试确定管理员是否登录时 事情变得复杂 我只能得到
  • 创建会话[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要在 php 中创建会话的帮助 我需要一个登录会话 然后如果用户想更改他们的用户名 他们可以但是 我知道如何更改用户名 但使用会话时情
  • 分布式张量流中的并行进程

    我有带有训练参数的张量流神经网络 它是代理的 策略 网络正在核心程序的主张量流会话的训练循环中进行更新 在每个训练周期结束时 我需要将该网络传递给几个并行进程 工作人员 这些进程将使用它来从代理策略与环境的交互中收集样本 我需要并行执行 因
  • 为什么我们提交表单时会生成一个新的令牌

    我正在努力理解回答SO https stackoverflow com questions 2133964 how to prevent multiple inserts when submitting a form in php 5159
  • 有没有办法阻止cfchart强制js进入响应内容?

    更新 已报告错误 感谢投票https tracker adobe com view CF 4200017 https tracker adobe com view CF 4200017 我们正在从 ColdFusion 10 迁移到 201

随机推荐