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