我编写了以下函数:
<cffunction name="check_session_valid" returntype="boolean">
<cfif NOT StructKeyExists(session,"username") OR (len(session.username) EQ 0)>
<script>location.href = 'logout.cfm'</script>
<cfabort>
</cfif>
<cfset session.myApp_start = now()>
<cfreturn true>
</cffunction>
在我的.cfm页面中,我可以使用调用该函数
<cfset session_valid = application.lib.check_session_valid()>
或
#application.lib.check_session_valid()#
有什么区别?最佳实践?
由于您询问了最佳实践,这是一个意见问题,我认为您可以通过让它返回true或false来改进您的函数,这取决于session.username
是否存在并且长度大于0。然后你可以这样使用它:
<cfif application.lib.check_session_valid()>
code for this condition
<cfelse>
<cflocation href = "logout.cfm">
<!--- note that cfabort is not necessary --->
<cfif>
关于您的具体问题,我认为额外的变量session_valid
是浪费打字。然而,这只是我的看法。
与你的问题无关,我发现你会将用户引导到一个名为logout.cfm的页面很奇怪。通常,用户会被引导到允许他们登录的页面。
老实说,两者都是有效的,根据您的尝试,两者都将被视为最佳实践。
我的经验法则是,如果我需要多次使用函数调用的结果,我会将其设置为变量
myResult = application.lib.check_session_valid();
如果我只需要使用一次变量,我会按照Dan提到的
if( application.lib.check_session_valid() ){
// Do stuff
}
你展示的例子之间的区别是
<cfset session_valid = application.lib.check_session_valid()>
这将把名为session_valid
的变量设置为从对check_session_valid()
的调用返回的任何值。
#application.lib.check_session_valid()#
在.cfm页面中,这将简单地呈现从对check_session_valid()
的调用返回的值,假设它在<cfoutput>
标记内。还有其他地方也会呈现该值,例如<cfsavecontent>
内部。