在ColdFusion 10中动态设置主机服务器的最佳方法

在ColdFusion 10中动态设置主机服务器的最佳方法,coldfusion,coldfusion-10,Coldfusion,Coldfusion 10,我使用以下命令动态检测主机服务器。使其动态化的重要性在于,目前存在太多硬编码重定向,例如: http:s//mysite.com/hr/index.cfm 在我的应用程序中。 当我从生产站点移动到开发站点,然后再返回生产站点时,我必须逐个手动更改/注释此http/https,这不仅耗时而且危险 下面是我发现的可以检测主机服务器的代码。然后,我做以下工作: <CFSET inet = CreateObject("java", "java.net.InetAddress")&g

我使用以下命令动态检测主机服务器。使其动态化的重要性在于,目前存在太多硬编码重定向,例如:

http:s//mysite.com/hr/index.cfm 
在我的应用程序中。 当我从生产站点移动到开发站点,然后再返回生产站点时,我必须逐个手动更改/注释此http/https,这不仅耗时而且危险

下面是我发现的可以检测主机服务器的代码。然后,我做以下工作:

      <CFSET inet = CreateObject("java", "java.net.InetAddress")>
      <CFSET inet = inet.getLocalHost()>
      <CFSET HostServer = "#inet.getHostName()#">
      <CFSET ThisHostServer = "#LEFT(HostServer,6)#">
      <CFSWITCH expression="#Trim(ThisHostServer)#"><!--- Prod or Dev server --->
         <CFCASE value="myprodsite.com">
           <CFSET UseThisURL = "http://myprodsite.com">
         </CFCASE>
         <CFCASE value="mydevsite.com">
           <CFSET UseThisURL = "http://myDevsite.com">
         </CFCASE>
      </CFSWITCH>
我的问题是:

  • 在应用程序中设置
    #使用此URL#
    的最佳方法是什么? 我正在Linux环境中使用ColdFusion 10和Application.cfc

  • 我应该将其设置为应用程序还是会话范围

  • 由于所有内容都在应用程序或会话范围内,当用户在某个页面上处于空闲状态且应用程序/会话范围过期时,当用户单击链接时是否会生成错误?如何防止用户看到使用此技术导致的错误?请指教,谢谢


  • 我使用的最佳实践是创建
    config.cfc
    ,它可以包含像
    getServerSpecificVariables()
    这样的函数来返回结构。此结构将保存在您的应用程序范围中,因为您不希望为每次会话启动创建
    USEThisURL
    。当需要重置时,只需清除应用程序范围。在
    Application.cfc
    范例

    Config.cfc:

    component{
    
        public struct function getServerSpeceficVariables(){
           var config = {};
           var inet = CreateObject("java", "java.net.InetAddress");
           inet = inet.getLocalHost();
           HostServer = inet.getHostName();
           ThisHostServer = LEFT(HostServer,6);
           switch(Trim(ThisHostServer)){
               case 'myprodsite.com':{
                  config.useThisURL = '';
                  break;
               }
    
              case 'mydevsite.com':{
                  config.useThisURL = '';
                  break;
               }
    
             }
             return config;
        }
    
    }
    

    如果有帮助的话,cgi.server_名称应该有这个域,但更好的问题可能是为什么要使用它?如果您只是做重定向,为什么不使用webroot的相对URL或绝对URL呢?因此,重定向到/my/new/path而不是。通过这种方式,它不依赖于域,并且更具可移植性。不需要额外的代码,也不需要任何额外的配置,只要按照@SeanCoyne所说的做就可以解决这个问题。无论代码运行在哪台服务器上,快速、简单都将始终有效。@Andi,我创建了config.cfc,但我不确定如何从ApplicationStart实例化和清除应用程序范围。我是CF新手,到目前为止还没有使用Application.cfc。我知道如何通过执行以下操作来实例化对象,但不在onApplicationStart中。我通常这样做:然后这是一个错误:以下是正确的代码:那么这是如何在OnApplicationStart中实例化的?OnApplicationStart我写过:在OnApplicationStart中,在项目中的任何地方引用变量都可以使用例如。。我遇到一个错误:在component/home/space/users/www/webdocsec/cfcomponents/GL/Config.cfc中找不到getServerSpecificVariables方法。我多次检查.cfc的路径和.cfc的名称(大写C)是否正确。我将我的Config.cfc放在cfcomponents文件夹下的GL子文件夹中,并在应用程序启动中引用它为:。
    component{
    
        public struct function getServerSpeceficVariables(){
           var config = {};
           var inet = CreateObject("java", "java.net.InetAddress");
           inet = inet.getLocalHost();
           HostServer = inet.getHostName();
           ThisHostServer = LEFT(HostServer,6);
           switch(Trim(ThisHostServer)){
               case 'myprodsite.com':{
                  config.useThisURL = '';
                  break;
               }
    
              case 'mydevsite.com':{
                  config.useThisURL = '';
                  break;
               }
    
             }
             return config;
        }
    
    }