这是 1.cfm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Page Title</title>
</head>
<body>
<cfscript>
a="aaaaaaaaaaa";
b="bbbbbbbbbbb";
request.r1="rrrrrrr111111111";
request.r2="rrrrrrrr222222222";
session.s1="sssssssssss11111111111";
session.s2="sssssssssss2222222222";
</cfscript>
<iframe src="2.cfm" width="600" height="400" name="myframe" scrolling="yes">
</iframe><br />
variables
<cfdump var="#variables#">
request
<cfdump var="#request#">
session
<cfdump var="#session#">
</body>
</html>
这是 2.cfm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>2.cfm</title>
</head>
<body>
variables
<cfdump var="#variables#">
request
<cfdump var="#request#">
session
<cfdump var="#session#">
</body>
</html>
答案 0 :(得分:8)
您似乎误解了网页请求的基本概念。
iframe虽然显示为呈现页面的一部分,但实际上是它自己的请求,完全独立于原始页面请求。
会话变量将在两者之间共享(假设您在Application.cfm / Application.cfc中启用了会话),虽然您不太可能通过从父页面设置变量来进入竞争条件( 1.cfm)并从iframe(2.cfm)的子页面中读取它们,这不是一个好主意(最佳实践)。
在父页面(1.cfm)中设置的请求变量将不可用于iframe(2.cfm)中的页面,因为它是一个单独的请求。
类似于请求范围对每个请求是私有的(但是对所有模板和对象共享),“变量”范围对于每个模板是私有的(但在使用cfinclude时在它们之间共享)。
虽然您的iframe可以访问自己的 请求和变量范围,但它们与原始网页的范围不同( 1.cfm)。
这是编程的一个相当基本的概念,也是ColdFusion的概念。如果你发现很难掌握,你可以考虑购买一份ColdFusion Web应用程序构建工具包,它可以很快地将你从完整的新手带到初级中级。
答案 1 :(得分:1)
您在运行这些测试的目录中是否有Application.cfm?
如果将以下行添加到名为Application.cfm的文件中,并将其作为目录的根目录。
<cfapplication name="test_app" sessionmanagement="true">
我测试了你的两个文件而没有Application.cfm它已经破了,现在它运行正常。
答案 2 :(得分:0)
我认为Ian在这里的正确轨道,他的观察是使用会话变量,需要启用会话管理,但我认为建议使用Application.cfm这有点不合时宜。
如果从CFMX7开始使用CF版本,管理应用程序框架的推荐方法是通过Application.cfc,相当于Ian的代码:
<cfcomponent>
<cfset this.name = "test_app">
<cfset this.sessionManagement = true>
</cfcomponent>