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

正直なところ、どちらも有効であり、何をしようとしているのかによっては、どちらもベスト プラクティスと見なされます。

私の経験則では、関数呼び出しの結果を複数回使用する必要がある場合は、それを変数に設定します

myResult = application.lib.check_session_valid();

変数を一度だけ使用する必要がある場合は、Dan が述べたことを実行します

if( application.lib.check_session_valid() ){
    // Do stuff
}

あなたが示した例の違いは

<cfset session_valid = application.lib.check_session_valid()>

これにより、named の変数がsession_validへの呼び出しから返されたものに設定されcheck_session_valid()ます。

#application.lib.check_session_valid()#

これにより、.cfm ページでは、呼び出しから返された値がタグcheck_session_valid()内にあると仮定して単純にレンダリングされます。<cfoutput>の内部など、これが値をレンダリングする他の場所もあります<cfsavecontent>

于 2020-07-27T18:01:36.593 に答える
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 に答える