ColdFusion Application.cfc onRequestStart会话作用域

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

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

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

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

这对任何人都有意义吗?关于我可以寻找哪些可能导致此问题的建议?我试图从onRequestStart方法中使用cfdump var=#session#转储会话变量,并抛出CF,错误表明会话未定义

更新

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

更新


好的,根据Frank的建议,我设置了onRequestStart方法,这样它就可以向我发送一封包含会话转储和cgi范围的电子邮件。我发现了以下几点。在会话转储中,cfid等于4830,cftoken从b8e0d5开始。。。然而,在CGI转储中,在HTTP_COOKIE下,值表示CFID=4609;CFTOKEN=dd15bc0。。。。他们应该匹配吗

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

他们是否应该匹配取决于程序员,而不是我们。但是,您可以如下调试这类事情

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

对我来说,通过在CF Administrator中启用J2EE会话变量解决了这种情况。请参阅此处的相关帖子

您使用的是什么版本的CF?@FrankTudor-ColdFusion 10是否可以更新您的问题:复制并粘贴
的确切代码以及从屏幕复制并粘贴的确切错误消息。从你的描述来看,这一切听起来都是合法的。是否涉及不同的域名,或在HTTP/HTTPS之间切换?这种情况会偶尔发生在任何用户身上,还是只发生在某些用户身上?在我看来,由于某种原因,您的会话cookie没有粘住,因此您会在每个请求中获得一个新的CFID/CFTOKEN/JSESSIONID。我不会运行它。我打赌亚当或亨利会有洞察力。所以基本上你的会话不会持续,你有一个用户id正在消失,但你不确定会发生什么。如果用户不在,onRequestSession会重定向用户?我所有的假设都正确吗?注释掉你的重定向(如果可以)或创建一个if语句,使用cgi.remote_addr查找你的ip地址,并仅为你的ip阻止它。如果你不知道,你可以转到谷歌,在搜索字段中键入什么是我的ip,然后剪切并粘贴它。关键是如果你能停止重定向,我打赌你能更进一步解决你的问题……这不是一个有用的评论。会话管理在ColdFusion中的工作方式对我来说是比较新的。我问他们是否应该匹配,因为我不确定。我知道发生了什么,我只是不明白为什么。@Phil听Dan说,他对CF的知识非常渊博,并且为你的思维提供了一个逻辑结构(因为我们没有什么其他的东西可以继续)。现在。另一件有助于更新您的问题的事情……这些事件发生的频率是多少?会话内容的createtime是多少?对于sessiontimeout=#CreateTimeSpan(0,0,30,0)#(30分钟)这样的用户来说,这种情况是否会自然而然地消失?如果用户处于非活动状态,单击“下一步”并触发重新路由,然后呼叫和投诉,则会导致您认为某个地方出了问题,而实际上并没有?是吗?@Phil你提到了两个子目录你提到它们是有原因的……会话会在这两个目录之间跳转吗?他们能毫无问题地跳转目录吗?或者,会话失败的发生频率是由于跳转造成的?