如何在CFScript中设置cookie的过期日期

7

似乎无法在cfscript中设置cookie的过期日期。有什么提示吗?顺便说一下,这是ColdFusion 9。

3个回答

10

<cfscript> 的等价物 <cfcookie> 仅提供Cookie作用域内存变量的直接赋值。您无法使用直接赋值来设置持久化cookie,这些cookie存储在用户系统上。因此,如果您想使用脚本编写的 CFML 设置永久性 cookie,您将需要编写一个包装函数。


8

我写了这个UDF。注意,它的httpOnly属性只适用于CF9,所以如果你使用的是CF8,你需要将其移除。

<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>
    if(!structKeyExists(cookie, "hitcount")) setCookie("hitcount",0);
    setCookie("hitcount", ++cookie.hitcount);
    setCookie("foreverknight",createUUID(),"never"); 
</cfscript>

<cfdump var="#cookie#">

2
CF9.0.1没有CFCookie cfscript的等效项,但如果您想使用CFFUNCTION,除了为CF6、7、8和9添加HTTPOnly支持外,仍然可以这样做。您将能够创建UDF,但它只不过不是以CFSCRIPT格式(不会有太大损失)。
关于如何执行此操作的良好描述在此处(带有源代码): http://www.modernsignal.com/coldfusionhttponlycookie (我不知道为什么这在CFLib.org上还不可用。)
我最初在使用CFHEADER创建cookie时遇到的一个问题是它允许混合大小写名称,而ColdFusion只能读取、更新和删除具有大写名称的cookie。
要在Firefox中测试/查看cookie并验证到期日期(或HTTPOnly设置),请安装FireCookie Firebug扩展程序: http://www.softwareishard.com/blog/firecookie/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接