【问题标题】:Why does coldfusion web page run before application.cfm is processed?为什么coldfusion网页在处理application.cfm之前运行?
【发布时间】:2014-07-30 14:11:24
【问题描述】:

我在 Windows2008 R2 上使用 ColdFusion 11。据我了解,如果根文件夹中有 application.cfm 页面,那么根目录下的任何 .cfm 页面都会先处理该页面,然后再处理常规的 .cfm 页面。我注意到它首先处理我的常规页面,然后调用 application.cfm 页面。

在我的例子中,我有一个更新数据库的网页,但是在我的 application.cfm 页面中,我检查了一个会话变量以查看用户是否已登录。如果他们没有登录,那么我将他们重定向到登录页面,让他们登录,设置会话变量,然后将他们重定向回处理页面。但我注意到,当我运行页面时,数据库会更新,然后用户会被重定向登录,然后数据库会再次更新。

我没有正确使用 application.cfm 页面吗?我认为它应该用于检查登录和类似的事情。如何确保它首先运行?

顺便说一句,它是整个网站中唯一的 application.cfm 页面,我没有任何 application.cfc 文件。

谢谢。

【问题讨论】:

  • application.cfm/cfc 总是首先运行,但是其中的事件在页面生命周期的不同时间发生。 onSessionStart 绝对应该在 onRequest 如果它是一个新会话之前运行。
  • Application.cfm 应该执行您放在那里的代码。正如其他人所说,它确实首先运行。解决此特定问题类似于解决许多其他问题。看看发生了什么。 cfdump 和 cfabort 是你的朋友。

标签: web-applications coldfusion


【解决方案1】:

Application.cfm 将随每个请求一起运行。如果您在 Application.cfm 中有一些数据库命中,那么您将在每个页面上命中该代码,除非首先发生重定向。如果没有看到您的确切代码,您可能会对此流程进行一些修改:

  1. 用户请求 page.cfm
  2. CF 在执行 page.cfm 之前读取 application.cfm 并且 a) 在 application.cfm 中访问数据库以执行某些操作,然后 b) 将您重定向到 login.cfm
  3. CF 第二次读取 application.cfm(这次是 login.cfm)并且 a) 在 application.cfm 中访问数据库以执行某些操作,并且 然后 b) 让您点击 login.cfm 模板。
  4. CF 第三次读取 application.cfm(这次是您的登录操作页面)。您设置会话变量并绕过 数据库 (?)

这都是猜测。如果这不能让您找到解决方案,请发布您的代码。

【讨论】:

  • 请注意,application.cfc 将为您提供更清晰的事件流,非常值得切换到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 2014-01-18
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多