我使用以下命令动态检测主机服务器。使其动态化的重要性在于,目前存在太多硬编码重定向,例如:
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>
然后在每个存在链接或重定向的页面上,我只需要使用:
#UseThisURL#/hr/index.cfm
我的问题是:
在应用程序中设置#UseThisURL#
的最佳方法是什么?
我在Linux环境中使用ColdFusion 10和Application.cfc
我应该将其设置为应用程序还是会话范围?
由于所有内容都在应用程序或会话范围内,当用户在某个页面上空闲且应用程序/会话范围已过期时,当用户单击链接时是否会生成错误?如何防止用户看到使用此技术导致的错误?请指教,谢谢!
答案 0 :(得分:0)
我使用的最佳做法是创建config.cfc
,它可以包含getServerSpecificVariables()
之类的函数来返回结构。此结构将保存在您的应用程序范围内,因为您不希望为每个会话启动创建USEThisURL
。当您需要重置时,只需清除您的应用程序范围。在config
onApplicationStart
内的Application.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;
}
}
组件下方实例化
实施例
Config.cfc:
{{1}}