如果需要,他们是否会强制 OnSessionstart 在 OnrequestStart 上再次运行。
我正在构建一个站点,其中基于动态子域创建了许多变量。因此,如果不重置会话变量,我将要检查 onRequestStart 域是否相同。
这有意义吗?有更好的解决方案吗?
如果需要,他们是否会强制 OnSessionstart 在 OnrequestStart 上再次运行。
我正在构建一个站点,其中基于动态子域创建了许多变量。因此,如果不重置会话变量,我将要检查 onRequestStart 域是否相同。
这有意义吗?有更好的解决方案吗?
onSessionStart 应该由不同的子域触发 - 那些将是不同的 cookie。
但是,如果 ColdFusion 应用程序事件中的代码需要共享或重新运行,请将它们分解为自己的函数并从多个事件中运行它们。这就是大多数框架运行它们的“重新初始化”功能的方式:应用程序在启动时被初始化,但也通过 URL。调用的是共享函数,而不是原始应用程序事件。
回答你的第一个问题,是的。您可以直接调用 onSessionstart ,如下所示:
<cfset onSessionstart()>
但是,所做的只是启动会话,并允许您在新会话启动时执行某些代码。CF 已在需要时自动启动新会话。
阅读它似乎你想要做的是设置域特定的会话变量。这可以通过多种方式完成,但可能最不“好”的方式是再次调用 onSessionstart 方法。我这么说的原因是,无论您在 onRequestStart 方法中做什么,您都可以/应该在 onSessionstart 中执行。也就是说,您在 onRequestStart 中可用的任何信息,只要用户正在使用的域在 onSessionstart 中可用。
而且,您可以在站点代码的任何位置设置会话变量。它不必在 onSessionstart 中完成。
我个人不会从 OnRequestStart 中调用 onSessionStart ,因为当您在 onSessionStart 中有您可能不想在每次 OnRequestStart 触发时运行的代码时,这可能真的很麻烦。我要做的只是创建一个新方法并将其放在 onSessionStart 和 onRequestStart 方法上。
为什么不直接在 onRequestStart() 中运行 onSessionStart()?这将导致 onSessionStart() 内部的代码触发。此时您不在会话创建生命周期之外,但代码将运行。