ColdFusion Application.cfc onRequestStart会话范围

时间:2014-05-08 14:50:02

标签: coldfusion coldfusion-10 application.cfc

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

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

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

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

更新

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

更新

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

2 个答案:

答案 0 :(得分:2)

对我来说,通过在CF Administrator中启用J2EE会话变量解决了这种情况。请参阅此处的相关信息https://forums.adobe.com/thread/1058200

答案 1 :(得分:0)

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

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

 if(actual result == expected result)
 output 'yes'
 else
 output 'no' and the actual result and the expected result
相关问题