如何在cfscript中设置cookie的到期日期

时间:2010-06-17 08:11:19

标签: cookies coldfusion

似乎无法在cfscript中设置cookie的到期日期。任何提示?这是冷敷9顺便说一句。

3 个答案:

答案 0 :(得分:10)

等同于<cfscript>的{​​{1}}仅提供Cookie范围仅内存变量的直接分配。您不能使用直接分配来设置存储在用户系统上的持久性cookie。因此,如果要使用仅限脚本CFML设置永久cookie,则必须编写包装函数。

答案 1 :(得分: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 :(得分:2)

CF9.0.1没有CFCookie cfscript等价物,但是如果你想使用CFFUNCTION,除了为CF6,7,8&amp;添加HTTPOnly支持之外,你仍然可以使用它。 9.你将能够创建一个UDF,但它不会采用CFSCRIPT格式(没有大的损失。)

关于如何在这里做一个很好的写作(使用源代码): http://www.modernsignal.com/coldfusionhttponlycookie (我不知道为什么CFLib.org上没有这个。)

我最初遇到的使用CFHEADER创建cookie的一个问题是它允许使用混合大小写的名称而ColdFusion只能读取,更新和删除大写名称的cookie。

要测试/查看Firefox中的Cookie并验证过期日期(或HTTPOnly设置),请安装FireCookie Firebug扩展程序: http://www.softwareishard.com/blog/firecookie/