如何在Coldfusion页面中“蒸发”会话变量定义?

时间:2013-01-25 00:42:33

标签: session variables coldfusion

我收到一条错误消息:“ auth.USR_xID在会话中未定义”不太可重复但是在这里和那里。但变量在第25行中定义,然后在第77行中使用,在第265行再次使用,但在这里它会抛出错误 - 我会说该页面的每1,000个请求。

Line 25: <cfparam name="session.auth.USR_xID" default="#SESSION.auth.USR_ID#">
some more code
Line 77: <cfset USR_Pointer = "#SESSION.auth.USR_xID#">
some more code
Line 265: <cfif session.auth.usr_id IS session.auth.usr_xid>
...

我们试图找到类似的情况,但不能。我们加载了页面,杀死了会话,然后点击提交。一切都很好。我们无法重现错误,但它发生了。我们拥有超过100万用户,在任何给定的秒内有10多笔交易。有人有想法吗?

3 个答案:

答案 0 :(得分:2)

@Derrick给出了一个很好的答案。另一种可能性是用户打开了两个应用程序实例。可以在两个选项卡或两个浏览器窗口中。这可能导致两个会话相互干扰。甚至有可能会话在一个标签中超时,这会使另一个标签混乱。

答案 1 :(得分:1)

IF - IF - 如果这是一个面向公众的网站/页面,很可能是因为机器人。我发现机器人可能/可能没有挂在代码之间 - 特别是在第25行和第77行(或第265行)之间机器人可能会被某些东西抓住并且由于机器人通常不会召开会话,它会产生一个错误。我筛选机器人并为机器人“用户”分配变量。如果用户是机器人(每个变量),那么我会做其他事情。合理?如果这不是一个面向公众的网站,那么我没有给你答案。但我自己的经验是,除非你的用户可以“坐”在页面上X的时间,然后重新加载而不必被迫重新启动会话,否则它总是会导致这些类型的错误。

答案 2 :(得分:1)

我同意丹, 将应用程序放在多个选项卡中是一种非常简单的方法来扰乱会话状态。

在我上一份工作中,我们编写了一个患者管理系统。 用户会;

  • 登录转到患者A,在当前选项卡中执行一些“内容”。
  • 打开一个新标签 - 在患者B的记录中执行某些操作。
  • 返回患者A的原始标签并在那里进行进一步编辑。

但是对患者A标签的更改 - 现在归因于患者B而不是患者A.(我们将患者存储在会话范围内 - 并且正在使用; where patientid = "#session.patientid#" - 在我们的所有查询中。

我们必须实现一些JS技巧和额外的CFML代码,通过将时间戳附加到会话标识符来确保它们在标签内是唯一的来尝试解决这个问题。

然后,您需要编写代码以保持用户的身份验证/授权 - 因为您现在有一个新的会话,而不是旧的会话 - 这对我们来说是一个巨大的问题。

我们花了很长时间来处理原因并解决它。

简单地告诉用户不要使用多个标签 - 对我们来说也不是一个可行的解决方案 - 所以我们一直在寻找技术解决方案。

尽管不再在那里工作 - 如果你想查看它,我可能会获得我们用于这项工作的代码部分吗?