在CFSCRIPT下使用Cookie
Coldfusion繼續來玩Cookie吧,
注意下面的操作可能需要CF9以上的版本,Railo 3.3 以上的版本執行上沒有問題。
繼上一篇 Using cookie in CFML 之後,如果想在 Cfscript 中使用cookie的操作要怎麼辦?
目前尋遍 adobe 官方文件得到的結果是:
但是還是有辦法操作的,就是利用 cf-tag 與 cfscript 混用:
首先,寫一段處理 cookie 的 Function :
然後,在 cfscript 中呼叫這個 Function 替你完成 處理 Cookie 的工作。
當然 cookie 如同一般結構變數也可以直接操作他的值,只是這種操作法就無法設定 cookie 變數的屬性,而且該 cookie 變數生命週期為 session:
上面提到的 Function 是和 cfscript 程式片斷放在同一個 page 上執行的,
如果是把 Function 放在.CFC 元件庫,記得要先建立元件庫物件才可以呼叫喔。
參考來源:how to set expiration date on a cookie in cfscript、Settings cookies (with expiration, etc) in CFScript
注意下面的操作可能需要CF9以上的版本,Railo 3.3 以上的版本執行上沒有問題。
繼上一篇 Using cookie in CFML 之後,如果想在 Cfscript 中使用cookie的操作要怎麼辦?
目前尋遍 adobe 官方文件得到的結果是:
Direct assignment of Cookie scope memory-only variables. You cannot use direct assignment to set persistent cookies that are stored on the user's system.真是沒輒!!
但是還是有辦法操作的,就是利用 cf-tag 與 cfscript 混用:
首先,寫一段處理 cookie 的 Function :
<cffunction name="setCookie" access="public" returnType="void" output="false">
<cfargument name="name" type="string" required="true">
<cfargument name="value" type="string" required="false">
<cfargument name="expires" type="any" required="false">
<cfargument name="domain" type="string" required="false">
<cfargument name="httpOnly" type="boolean" required="false">
<cfargument name="path" type="string" required="false">
<cfargument name="secure" type="boolean" required="false">
<cfset var args = {}>
<cfset var arg = "">
<cfloop item="arg" collection="#arguments#">
<cfif not isNull(arguments[arg])>
<cfset args[arg] = arguments[arg]>
</cfif>
</cfloop>
<cfcookie attributecollection="#args#">
</cffunction>
然後,在 cfscript 中呼叫這個 Function 替你完成 處理 Cookie 的工作。
<cfscript>
<!--- 檢查並讀取cookie變數 --->
if(!structKeyExists(cookie, "hitcount")) hcnt = cookie.hitcount;
<!--- 設定cookie變數 --->
setCookie("hitcount",0);
setCookie("hitcount", ++cookie.hitcount);
<!--- 包含設定cookie變數的生存期的用法 --->
setCookie("foreverknight",createUUID(),"never");
<!--- 顯示cookie --->
dump(cookie);
<!--- 刪除cookie --->
setCookie("foreverknight","","now");
</cfscript>
當然 cookie 如同一般結構變數也可以直接操作他的值,只是這種操作法就無法設定 cookie 變數的屬性,而且該 cookie 變數生命週期為 session:
<cfscript>
<!--- 並設定cookie變數(該變數不存在時會建立) --->
cookie.hitcount = 0;
cookie.foreverknight = createUUID();
</cfscript>
上面提到的 Function 是和 cfscript 程式片斷放在同一個 page 上執行的,
如果是把 Function 放在.CFC 元件庫,記得要先建立元件庫物件才可以呼叫喔。
參考來源:how to set expiration date on a cookie in cfscript、Settings cookies (with expiration, etc) in CFScript
留言