目录
北极星书库
以下对ColdFusion的各种变量进行逐一介绍。
局部变量
局部变量是用CFSET标签和CFPARAM标签所创建的变量的缺省类型。这种变量只能在创建它的文件中或包含该文件的文件中引用。
查询变量
一旦执行了一个查询,就可以通过查询变量来访问查询的结果。查询变量的前缀是查询名,变量名即是表中的字段名。例如,你执行了一个名为LookupUser的查询,所查询的字段之一是名为ID的字段,那么你可以用变量LookupUser.ID来访问查询结果中的ID字段的值。
URL变量
URL变量以variablename=value的形式追加在URL后面,传递给URL所指的网页,在该网页中用URL.variablename引用该变量。
Form变量
网页之间传递参数的最常用方法就是用Form变量。当客户在Form字段中输入数据并提交,其输入的数据以Form变量的形式传递给ACTION属性所指的网页,在该网页中用Form.variablename引用该变量,variablename即是Form字段的名字。
Cookie变量
Cookie是服务器端的应用程序(如ColdFusion)在浏览器中存储信息的一种机制。存储在浏览器中的Cookie可以返回给服务器端应用程序。利用Cookie,应用程序可以创建与某个特定浏览器相关的变量。例如,你可以为背景颜色建立一个Cookie,从而使你的站点在不同客户的浏览器中具有不同的颜色。
Cookie是与特定站点相关的,当浏览器访问一个特定的站点时,基于该站点的Cookie被传至服务器端。
可以用SSL(Secure Sockets layer)对Cookie进行加密。Cookie将一直存在,直到它们到期或被删除。目前的主流浏览器都支持Cookie。
创建Cookie
标签CFCOOKIE用来建立Cookie,例如:
<CFCOOKIE NAME="User_ID" VALUE="2344"
EXPIRES="100">
这个例子创建了变量Cookie.User_ID,其值为2344,将在100天后到期。
Cookie建立之后,同一站点上的所有ColdFusion网页均可以引用该Cookie。这意味着你可以用Cookie在网页间传递参数。注意,Cookie不适于用来存储安全信息,如密码,信用卡号码等。
注意:如果在创建Cookie的文件中,在CFCOOKIE标签后执行了CFLOCATION标签,则CFCOOKIE标签创建的Cookie将会丢失。
在网页中使用Cookie
一旦在客户浏览器中存储了Cookie,每当浏览器请求你站点的网页时,Cookie变量会被自动传给Web服务器。与其它类型的变量一样,你可以使用前缀来引用Cookie变量的值,例如:
<CFOUTPUT> #Cookie.User_ID#
</CFOUTPUT>
删除Cookie
要是删除一个Cookie,你可以用CFCOOKIE标签,将EXPIRES属性设为“now”,例如:
<CFCOOKIE NAME="User_ID" VALUE="#User_ID#"
EXPIRES="now">
当浏览器关闭时,这个Cookie会被删除。
Client变量
Client变量是与特定客户相关的变量。当客户在一个应用程序的不同文件间移动(此处“移动”指客户从一个文件中链接到另一个文件)时,Client变量可以用来维持客户的状态,识别一个特定的客户。
对一个启动了客户状态管理的应用程序,ColdFusion为每一个请求该应用程序文件的浏览器建立一个客户记录,客户记录由一个唯一的令牌来标识,令牌存储在客户浏览器的一个Cookie中。有了客户记录后,就可以在客户记录中定义Client变量,这些变量可在整个应用程序的任何文件中引用。当客户请求一个文件时,ColdFusion根据浏览器提供的令牌来选择相应的客户记录,于是所有的Client变量均可以使用。
创建client变量的步骤如下:
- 在Application.cfm文件的CFAPPLICATION标签中,设置CLIENTMANAGEMENT=”yes”,启动客户状态管理。(关于Application.cfm文件后文有介绍)
- 在CFAPPLICATION标签中,通过设置CLIENTSTORAGE属性,选择client变量的存储位置。其缺省位置在ColdFusion Administrator中设置,可以是注册表,已存在的数据源,或Cookies。
- 用CFSET或CFPARAM创建该变量。例如:
<CFSET Client.FavoriteColor=”Conflower Blue”>
标准Client变量
ColdFusion提供了几个标准Client变量,这些变量有助于记录客户访问你站点的次数和上次访问的时间等信息。例如,下面的例子显示了客户上次访问你站点的时间:
<CFOUTPUT>
Welcome back to the Web SuperShop, your last visit
was on #DateFormat(Client.LastVisit)#.
</CFOUTPUT>
标准Client变量具有只读属性,你可以访问它们,但不能在程序中设定它们的值。这些变量包括:
·CFID
·CFToken
·URLToken
·HitCount
·TimeCreated
·LastVisit
不利用Cookie而实现客户状态管理
在Coldfusion中,客户状态管理被设计为使用Cookie,这是识别一个客户的标准方法。你也可以不利用Cookie而实现客户状态管理,要做到这一点,你必须通过隐藏的Form字段或URL变量,在网页之间传递客户ID(CFID)和客户安全令牌(CFTOKEN),这需要教高的编程技巧。
Client变量的存储
Client变量的缺省存储位置是系统注册表,你可以用ColdFusion Administrator改变其缺省位置,将Client变量存在SQL数据库或Cookie中。在Application.cfm文件中用CFAPPLICATION标签的CLIENTSTORAGE属性可以设置Client变量的存储位置,该设置将覆盖ColdFusion Administrator的缺省设置。例如:
<CFAPPLICATION NAME="myapplication"
CLIENTMANAGEMENT="Yes"
CLIENTSTORAGE="mydatasource">
如果不设置CLIENTSTORAGE属性,ColdFusion将使用缺省设置。注意,Client变量的存储机制具有排斥性,当使用某一种存储类型时,其他存储类型的Client变量不可访问。
用Cookie存储Client变量时,应考虑如下的限制因素:
·Netscape Navigator只允许为一个特定主机设置20个Cookie。ColdFusion使用了两个Cookie用于CFID和CFTOKEN,并用一个名为CFGLOBALS的Cookie存储客户的全局数据如HitCount,TimeCreated,和LastVisit。
·Netscape Navigator设定了每个Cookie不能大于4K字节的限制。也就是说你不能在Cookie中存储过多的数据。
·如果客户浏览器禁止使用Cookie,Client变量将不能工作。
得到Client变量列表
使用函数GetClientVariableslist()可以获得Client变量的列表,该函数返回的是用逗号隔开的,由CFAPPLICATION所确定的应用程序范围内的Client变量的名字。标准Client变量不在返回列表中。
删除Client变量
用函数DeleteClientVariable()删除Client变量,例如:
<CFSET IsDeleteSuccessful=DeleteClientVariable("MyClientVariable")>
该函数只能删除由CFAPPLICATION确定的应用程序范围内的Client变量。
同样,通过ColdFusion Administrator中的设置,可以在一个特定的天数之后删除Client变量,对存储在注册表中的变量,其缺省值是90天,对存储在数据库中的变量,缺省值是10天。注意,你不能删除系统提供的标准Client变量。
Application变量和Session变量
Application变量和Session变量是整个应用程序范围内的变量,在应用程序的任何文件中都可以访问。你要在变量名前面加前缀才能访问这些变量,例如,“Session.MyVariable”,“Application.MyVariable”。由于它们可在整个应用程序范围内访问,因此可以利用它们在网页间传递数据。
允许Application变量和Session变量
与Client变量一样,可以用CFAPPLICATION标签允许Application变量和Session变量。(具体语法请参阅ColdFusion文档CFML language reference部分)
与Client变量不同的是,Application变量和Session变量始终保存在服务器的内存中,这使得它们的存取速度更快。另外,你可以用ColdFusion Administrator或在CFAPPLICATION中,设置这两种变量的生存时间。你也可以完全禁止Application变量和Session变量。
Session变量
与Client变量一样,Session变量与某个特定的客户相关,它也需要一个客户ID,并始终与客户ID连系在一起。当客户第一次请求一个ColdFusion应用程序文件时,即建立一个Session,Session有一定的生存时间,如果在限定的时间内客户没有向服务器发出请求,则该Session结束。
如果两个客户连接到服务器上的同一个应用程序,这是两个独立的Session,每个客户都有自己的Session变量,它们可能有不同的值,客户不能访问别人的Session变量。
Session变量适于存储与特定客户有关的全局性信息。当客户第一次请求网页时,有关信息被初始化在Session变量中,客户访问其它网页时,这些信息仍可以直接使用。
要允许Session变量,可在Application.cfm文件的CFAPPLICATION标签中设置SESSIONMANAGEMENT
Session变量的生存期
Session变量有一个特定的生存期,正是这个生存期定义了一个“Session”。当你在一个Session变量的生存期内访问它时,该变量可以访问,如果超过了生存期,该变量将不再存在。
Session变量的缺省过期时间是20分钟,即如果浏览器在20分钟内没有与服务器联系,该Session将被结束。你可以用ColdFusion Administrator改变这一缺省设置。
你也可以用CFAPPLICATION标签的SESSIONTIMEOUT属性来设置Session变量的过期时间,这将覆盖Administrator的缺省设置。
Application变量
Application变量也是可以在整个应用程序范围内访问的变量。与Session变量不同的是,Application变量不针对特定的客户,它不需要与特定的客户ID相关联,一个应用程序的所有客户可以访问同一个Application变量。这种变量适于存储应用程序级的不与特定客户相关的,由所有客户共同使用的数据。
这里有必要解释一下什么是“应用程序”。在ColdFusion中,通过在Application.cfm文件的CFAPPLICATION标签中设置NAME属性,为应用程序指定一个应用程序名,所有具有相同应用程序名的文件属于同一个应用程序,而同一个应用程序的所有文件共享所有的Application变量,这些变量对所有的客户都相同。(关于Application.cfm文件及“应用程序”的定义,后文有更多叙述)
Application变量的生存期
应用程序也有一定的生存期,当第一个访问者请求一个应用程序中的某个文件时,ColdFusion初始化该应用程序,如果在限定的时间内没有客户再请求该应用程序的文件,则该应用程序被结束,Application变量不再存在。
Application变量的缺省过期时间是2天。你可以用ColdFusion Administrator改变这个缺省值。你也可以用CFAPPLICATION标签的APPLICATIONTIMEOUT属性设置Application变量的过期时间,从而覆盖Asministrator的缺省设置。
注意:使用Application变量和Session变量时,必须使用前缀。
Server变量
Server变量可以在当前Web服务器所服务的所有应用程序中,由所有的客户引用,直到ColdFusion Server关闭。
Server变量适于存储不经常改变的,可以被多个客户和多个应用程序共享的数据。你可以用Server变量存储运行在你站点上的所有应用程序都需要的信息,例如关于某个数据源的信息。
ColdFusion带有下列内建的Server变量:
·Server.ColdFusion.ProductName—--返回ColdFusion产品名。
·Server.ColdFusion.ProductVersion---返回ColdFusion的版本信息。
·Server.ColdFusion.ProductLevel---返回ColdFusion的产品等级信息。
·Server.ColdFusion.SerialNumber---返回ColdFusion的序列号。
·Server.OS.Name---返回服务器操作系统的名字。
·Server.OS.AdditionalInformation---返回关于操作系统的附加信息。
·Server.OS.Version---返回服务器操作系统的版本信息。
·Server.OS.BuildNumber---返回服务器操作系统的建立号。
注意:Server变量具有读-写属性,小心不要覆盖了内建的Server变量。
CGI环境变量
每当浏览器向Web服务器请求服务时,就会创建一系列环境变量,有些由浏览器创建,有些由服务器创建。这些变量称为CGI变量,用前缀“CGI”来引用(既使服务器使用API而不是CGI与ColdFusion相通信)。
环境变量中是浏览器和服务器之间对话的一些相关数据,如IP地址,浏览器类型,通过认证的客户名等。你可以在浏览器所请求的文件中的任何位置引用CGI环境变量。所有的CGI变量都是只读的。
注意,在你的应用程序中可以引用的CGI变量与具体的浏览器和Web服务器软件有关。
检测CGI变量
因为并非每种浏览器都支持所有的CGI变量,当测试一个CGI变量的存在时,ColdFusion总是返回TRUE,既使浏览器并不支持该变量。避免这种情况的方法是检测一个空字符串,而不是检测逻辑值,例如:
<CFIF CGI. varname IS NOT "">
CGI variable exists
<CFELSE>
CGI variable does not exist
</CFIF>
服务器CGI变量
下表列出了由服务器创建的最常用的CGI变量(并非每种浏览器都支持这些变量):
服务器CGI变量 |
|
变量 | 描述 |
SERVER_SOFTWARE | 响应请求的服务器软件的名字和版本。格式:名字/版本。 |
SERVER_NAME | 服务器的主机名,DNS别名,或IP地址。 |
GATEWAY_INTERFACE | 服务器所遵循的CGI规范的版本。格式:CGI/版本。 |
SERVER_PROTOCOL | 这次请求所使用的协议的名字和版本。格式:protocol/版本 |
SERVER_PORT | 请求传至的端口号。 |
REQUEST_METHOD | 请求服务时使用的方法,对HTTP是Get,Head,Post等。 |
PATH_INFO | 由浏览器提供的特殊路径信息。访问脚本可以使用虚拟路径,后面跟以特殊路径信息,该信息存在PATH_INFO中。 |
PATH_TRANSLATED | 服务器转换过的PATH_INFO,虚拟路径映射为物理路径。 |
SCRIPT_NAME | 指向要执行的脚本的虚拟路径,用于自引用的URLs. |
QUERY_STRING | 跟在URL中“?”后面的查询信息。 |
REMOTE_HOST | 请求服务的主机名。如果服务器不知道这项信息,它将创建REMOTE_ADDR,而不是REMOTE_HOST。 |
REMOTE_ADDR | 请求服务的远程主机的IP地址。 |
AUTH_TYPE | 如果服务器支持客户认证,并且脚本受保护,此变量包含基于特定协议的认证方法。 |
REMOTE_USER AUTH_USER |
如果服务器支持客户认证,并且脚本受保护,此变量包含已认证的客户名。 |
REMOTE_IDENT | 如果HTTP服务器支持RFC931标识,这个变量被设置为远程的客户名。 |
CONTENT_TYPE | 对带有附加信息的查询,如HTTP POST和PUT,此变量指出附加信息的类型。 |
CONTENT_LENTH | 客户提供的信息的长度。 |
客户CGI变量
下表列出了由浏览器创建后传递给服务器的,最常用的CGI环境变量:
客户CGI变量 |
|
变量 |
描述 |
HTTP_REFERER |
引用的文档。这是链接所来自的文档或提交Form数据的文档。 |
HTTP_USER_AGENT |
客户当前使用的浏览器。格式:软件/版本库/版本。 |
前页
目录
北极星书库