Adobe ColdFusion 8

cfapplication

描述

定义ColdFusion应用程序的作用范围;设定客户端变量是否起作用;并指定客户端变量的存储方式;设定session变量起作用; 并设定Application变量超时的时间.

类别

应用程序框架 标签

语法

<cfapplication 
    name = "application name"
    applicationTimeout = #CreateTimeSpan(days, hours, minutes, seconds)#
    clientManagement = "yes|no"
    clientStorage = "data source name|Registry|Cookie" 
    loginStorage = "cookie|session"
    scriptProtect = "none|all|list"
    sessionManagement = "yes|no"
    sessionTimeout = #CreateTimeSpan(days, hours, minutes, seconds)#
    setClientCookies = "yes|no" 
    setDomainCookies = "yes|no">

注: 你可以在attributeCollection 中指定这个标签的属性,作为一个结构的value,在attributeCollection 中指定结构的名称,并使用这个标签的属性名称作为这个结构的Keys.

历史

ColdFusion 8: 新增 secureJSONSecureJSONPrefix 属性

ColdFusion MX 7: 新增 scriptProtect 属性

ColdFusion MX 6.1: 新增 loginStorage 属性

属性

属性

必须/可选

默认

描述

name

请看描述

 

应用程序的名称.最多64个字符.

ApplicationSession 变量而言: 该属性必须.

对客户端变量而言: 可选

applicationTimeout

可选

在ColdFusion Administrator变量页面指定

application变量的作用时间. 用CreateTimeSpan 函数来设定,并分別输入日,时,分,秒等值, 指定Session变量的生命周期.

clientManagement

可选

no

  • yes: 使用客户端变量.
  • no

clientStorage

可选

registry

客户端变量如何存储:

  • datasource_name:将Client变量存储在指定的ODBC或Native数据来源内.
  • registry: 将客户端变量存储在系统注册区.
  • cookie: 将客户端变量存储在使用者电脑的Cookie内,对大量资料的Client变量而言,将Client变量资料存储在Cookie內是相当值得的, 但当使用者关闭Cookie功能时,将会不起作用.

loginStorage

可选

cookie

  • cookie: 存储登陆信息在 Cookie 变量中.
  • session: 存储登陆信息在 Session 变量中.

scriptProtect

可选

ColdFusion Administrator决定Global Script的设置是否受保护

制定变量是否在被跨站攻击时受保护

  • none: 不受保护
  • all: 保护 Form, URL, CGI, 和 Cookie 等
  • 以逗号分隔的Coldfusion 变量: 变量在指定范围内受保护.

另外更多的信息,主要视实际用途而定.

secureJSON

可选

Administrator value

一个布尔值,来决定在一个ColdFusion函数返回JSON格式的远程调用时响应的值是否都加上一个安全前缀.

默认JSON前缀设定在 Administrator Server Settings > Settings page (默认是 false). 你也可以在cffunction标签中修改这个设定.

secureJSONPrefix

可选

Administrator value

如果 secureJSON 设置为 true,设定用于一个ColdFusion函数返回JSON格式的远程调用时响应的值加上一个安全前缀的值.

该默认值设定在Administrator Server Settings > Settings page (which defaults to //, JavaScript 评论文字).

 

sessionManagement

可选

no

  • yes: 可以使用Session变量.
  • no

sessionTimeout

可选

在ColdFusion Administrator的变量设定页面指定

时间寿命变量. 使用CreateTimeSpan 函数设定,参数为天,时,分,秒, 用逗号隔开.

setClientCookies

可选

yes

  • yes: 使用客户端cookie.
  • no: ColdFusion 不会自动发送CFID 和 CFTOKEN cookies给客户端浏览器; 对每一个有使用到session和客户端变量的网页,必须手动按照url传递参数的方式加上CFID 和 CFTOKEN两个传递参数值.

setDomainCookies

可选

no

  • yes: 为所有客户端变量设定一个域 的 CFID 和 CFTOKEN cookies,当为客户端变量存储空间设定使用cookies时,要求应用程序要运行在clusters.
  • no:为 CFID, CFTOKEN, 和 所有客户端变量 cookies使用主机绑定cookies .

用途

这个标签常被使用在 Application.cfm文件中, 为ColdFusion应用程序做一些默认设置.

这个tag也可以设定application变量,除非在ColdFusion Administrator中被关闭.管理员设置时也常常用sessionManagement这个属性.更多信息,请参看Configuring and Administering ColdFusion.

如果ColdFusion是运行在cluster上, 你需要制定 clientStorage = "cookie" 或是一个 data source 名称; 你不能指定为 "registry".

如果application的名称大于64字符,ColdFusion将提示错误.

CFTOKEN 变量长度为8个字节数. 他的范围是 10000000 --99999999.

保护变量不受跨站攻击

如果客户试图让你的申请发送恶意代码返回到用户的浏览器,该scriptprotect属性可以让你保护一个或多个变量作用域从跨站点脚本攻击. 在这些攻击中, 使用者输入(例如,从表单元素或表单,URL变量)注定作为CF 变量为使用者所输出. 这些提交包含恶意代码, 类似JavaScript 或 一个附属小程序或是某个对象参考,在使用者的电脑系统上被执行.

注: ColdFusion Administrator 设置页面能够让 Global Script 保护选项决定默认脚本保护设定 .你可以使用 scriptProtect 属性去修改Administrator setting. 或是你也可以使用Application.cfc初始化代码去设定 protection value.

ColdFusion 跨站脚本保护操作是在ColdFusion一开始响应请求并执行程序时就完成的. 因此,它可以在用户的请求下执行 URL, 和 Cookie, CGI, 与 Form 等变量.默认情况下,它会视下列几个HTML标签的名字为无效tag: object, embed, script, applet, 和 meta. 但允许这些名称做为纯文本,并且在他们被作为标签名称使用时替换.

你可以指定一些或全部的coldfusion变量被保护, 但一般只有Form, URL, CGI, 和 Cookie scopes 有变量往往来源不明.此外,保护是需要额外处理执行的.因为这些因素,所有需要受保护的属性值大概就在这四个范围内.

脚本保护机制适用于作为一个正则表达式,在服务端配置时被定义在cf_root/lib/neo-security.xml 文件中, 或是作为变量值在J2EE配置中定义在 cf_root/WEB-INF/cfusion/lib/neo-security.xml文件中.你可以自己在CrossSiteScriptPatterns中的定义Coldfusion的模式来替换被修改的正则表达式.

锁定 服务器, 应用程序, 和 session 变量

当你要在服务器上设定或更新变量,应用程序,设定session 范围,可以使用 cflock标签 scope 属性来设定以下值:

  • 为server variables, 指明 server
  • 为application variables, 指明 application
  • 为 session variables, 指明 session

在一些范例中, 你需要在这些范围内锁定代码成只读.需要了解锁定范围的操作和讲解, 请看cflock.

范例

<!--- This example shows how to use cflock to prevent race conditions during data updates to variables in Application, Server, and Session scopes. --->
<h3>cfapplication Example</h3>
<p>cfapplication defines scoping for a ColdFusion application and enables or disables application and/or session variable storage. This tag is placed in a special file called Application.cfm that automatically runs before any other CF page in a directory (or subdirectory) where the Application.cfm file appears.</p>

<cfapplication name = "ETurtle" 
sessionTimeout = #CreateTimeSpan(0, 0, 0, 60)# 
sessionManagement = "Yes">

<!--- Initialize session and application variables used by E-Turtleneck. ---> 
<cfparam name="application.number" default="1">
<cfparam name="session.color" default= "">
<cfparam name="session.size" default="">

<cfif IsDefined("session.numPurchased") AND IsNumeric(trim(session.cartTotal))>
<!--- Use the application scope for the application variable to prevent race condition. This variable keeps track of total number of turtlenecks sold. --->
    <cflock scope = "Application" timeout = "30" type = "Exclusive">
    <cfset application.number = application.number + session.numPurchased>
    </cflock>
</cfif>

<cfoutput>
E-Turtleneck is proud to say that we have sold #application.number# turtlenecks to date.
</cfoutput>
<!--- End of Application.cfm --->