【问题标题】:ColdFusion Application.cfc onRequestStart Session scopeColdFusion Application.cfc onRequestStart 会话范围
【发布时间】:2014-06-26 01:13:23
【问题描述】:

我有一个用 ColdFusion 编写的应用程序,它允许用户登录。我的登录页面位于根目录中的一个名为“login”的子目录中。在登录过程中,系统会根据我的数据库检查用户名和密码,并假设它们是合法的,它会设置一个会话变量“Session.LOGIN_ID”。在我的登录脚本的底部,我可以毫无问题地将 login_id 打印到浏览器。但是,我的登录脚本的最后一部分是将用户重定向到主主页,该主页位于根目录中名为“main”的子目录中,有时页面无法加载,而是将用户返回登录屏幕,并显示一条消息,说明他们的会话由于不活动而结束。

我在“主”文件夹中定义了一个 Application.cfc 文件,其中定义了一个 onRequestStart 方法来检查是否定义了 Session.LOGIN_ID。如果不是,它会将用户重定向回登录页面,并显示他们的会话由于不活动而结束的消息。

我的问题是,为什么我的会话变量没有出现在 onRequestStart 方法中?这很奇怪,因为如果我清除浏览器缓存并登录,我就可以毫无问题地登录。

这对任何人都有意义吗?关于我可以寻找什么可能导致这个问题的任何建议?我尝试在 onRequestStart 方法中使用 cfdump var=#session# 转储会话变量,然后 CF 抛出并错误指出 SESSION 未定义。

更新

应亚当的要求,没有涉及多个域。此外,无需从 HTTP 切换到 HTTPS。但是,登录页面不受 Application.cfc 的约束,因为登录页面位于我的“登录”文件夹中。 Application.cfc 文件与我的应用程序的其他组件一起位于“主”文件夹中。至于 cfdump 的屏幕截图,我不想冒犯任何人,但我不能真正发布屏幕截图,因为它包含与网站有关的信息,我无权发布此类信息。我可以说,当我尝试对会话范围进行 cfdump 时,它确实在列表中显示了一些项目,例如 cfid、tokenid 等。但是 session.login_ID 不存在。

更新

好的,接受 Frank 的建议,我设置了 onRequestStart 方法,以便它向我发送一封电子邮件,其中包含会话和 cgi 范围的转储。我发现了以下内容。在会话转储中,cfid 等于 4830,cftoken 以 b8e0d5 开头... 但是,在 CGI 转储中,HTTP_COOKIE 下的值显示为 CFID=4609; CFTOKEN=dd15bc0.... 他们应该匹配吗?

【问题讨论】:

  • 你用的是什么版本的CF?
  • @FrankTudor - ColdFusion 10
  • 您能否更新您的问题:复制并粘贴<cfdump> 的确切代码以及从屏幕复制和粘贴的确切错误消息。从您描述的内容来看,这一切听起来都是合法的。是否涉及不同的域名,或在 HTTP/HTTPS 之间切换? any 用户或只是某些用户偶尔会发生这种情况吗?在我看来,由于某种原因,您的会话 cookie 没有粘住,所以每个请求都会获得一个新的 CFID/CFTOKEN / JSESSIONID。
  • 我没有运行它。我敢打赌亚当或亨利会有洞察力。
  • 所以基本上你的会话不会持续,你有一个 user_id 消失但你不确定会发生什么。如果用户不存在,onRequestSession 会重定向用户吗?我所有的假设都正确吗?注释掉你的重定向(如果可以的话)或创建一个 if 语句,使用 cgi.remote_addr 查找你的 IP 地址,如果你不知道它,你可以去谷歌输入什么是我的 IP在搜索字段中并剪切并粘贴。关键是如果你能停止重定向,我敢打赌你可以更接近解决你的问题。

标签: coldfusion coldfusion-10 application.cfc


【解决方案1】:

对我来说,通过在 CF Administrator 中启用 J2EE 会话变量来解决这种情况。在此处查看相关帖子https://forums.adobe.com/thread/1058200

【讨论】:

    【解决方案2】:

    这是一个格式化的评论,回应“我刚刚注意到转储中的项目不匹配,并想我会提到它以防它们应该匹配”。

    它们是否应该匹配取决于程序员,而不是 StackOverflow 上的我们。但是,您可以按如下方式调试此类事情。

     if(actual result == expected result)
     output 'yes'
     else
     output 'no' and the actual result and the expected result
    

    【讨论】:

    • ....不是有用的评论。 ColdFusion 中会话管理的工作方式对我来说相对较新。我在问他们是否应该匹配,因为我不确定。我知道发生了什么,只是不明白为什么。
    • @Phil 听 Dan 说,他对 CF 的东西非常了解,并且为您的思维提供了一个合乎逻辑的结构(因为我们几乎没有其他工作要做)。现在。另一件有助于更新您的问题的事情......这些事件发生的频率是多少?您的会话内容的创建时间是多少?对于像 sessiontimeout=#CreateTimeSpan(0,0,30,0)# (30 分钟) 这样的用户来说,这是否会自然而然地消失,并且用户接下来会进行非活动点击并触发重新路由,然后调用和抱怨导致您假设出现问题时它不是?会这样吗?
    • @Phil 您还提到了两个子目录,您提到它们是有原因的……会话会在两个目录之间跳转吗?他们跳转目录没有任何问题吗?还是因为跳过而导致会话失败的频率?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多