2

我收到一条错误消息:“ auth.USR_xID is undefined in Session ”不是完全可重复的,但到处都是。但是该变量是在第 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 多笔交易。有人有想法吗?

4

3 回答 3

2

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

于 2013-01-25T01:49:50.850 回答
1

我同意 Dan 的观点,将应用程序放在多个选项卡中是破坏会话状态的一种非常简单的方法。

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

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

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

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

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

我们也花了很长时间才弄清楚原因和解决方法。

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

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

于 2013-01-25T16:07:23.563 回答
1

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

于 2013-01-25T01:16:06.047 回答