【发布时间】: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