1

我写了以下函数:

  <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()#

有什么不同?最佳实践?

4

2 回答 2

2

既然您询问了最佳实践,这是一个见仁见智的问题,我认为您可以通过让它返回 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 的页面很奇怪。通常,用户会被引导到允许他们登录的页面。

于 2020-07-27T16:57:25.737 回答
2

老实说,两者都是有效的,并且都将被视为最佳实践,具体取决于您要执行的操作。

我的经验法则是,如果我需要多次使用函数调用的结果,我会将其设置为变量

myResult = application.lib.check_session_valid();

如果我只需要使用变量一次我会做丹提到的

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>标签内。还有其他地方也会呈现该值,例如在 a<cfsavecontent>中。

于 2020-07-27T18:01:36.593 回答