在coldfusion中,变量在什么范围内可以传递给iframe页面?

时间:2009-07-17 03:16:15

标签: session iframe variables coldfusion scope

我写了2页来测试这个问题,但服务器投诉错误。我不知道为什么,任何人都能解释一下吗?非常感谢。

这是 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>

3 个答案:

答案 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>