в Coldfusion переменные в какой области могут быть переданы на страницу iframe? - PullRequest
2 голосов
/ 17 июля 2009

Я написал 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 ]

8 голосов
/ 17 июля 2009

Похоже, вы неправильно понимаете основную концепцию запросов веб-страниц.

iframe, хотя и отображается как часть страницы рендеринга, фактически является собственным запросом, совершенно отдельным от исходного запроса страницы.

Переменные сеанса будут разделены между двумя из них (при условии, что у вас включены сеансы в Application.cfm / Application.cfc), и хотя маловероятно, что вы попадете в состояние гонки, установив переменные из родительской страницы ( 1.cfm) и читать их со страницы ребенка в iframe (2.cfm), это просто не лучшая идея (лучшая практика).

Переменные запроса, заданные на родительской странице (1.cfm), будут не доступными для страницы в iframe (2.cfm), так как это отдельный запрос.

Подобно тому, как область запросов является частной для каждого запроса (но разделяется для всех шаблонов и объектов), область «переменных» является частной для каждого шаблона (но разделяется между ними при использовании cfinclude).

Хотя ваш iframe будет иметь доступ к своим запросам и переменных областей действия, они не будут иметь ту же область, что и исходная страница (1.cfm ).

Это довольно базовая концепция программирования в целом, а также ColdFusion. Если вам трудно это понять, вы можете подумать о том, чтобы взять копию комплекта для разработки веб-приложений ColdFusion, который может довольно быстро перенести вас с уровня новичка на уровень от начального до среднего.

1 голос
/ 17 июля 2009

У вас есть Application.cfm в каталоге, в котором вы запускаете эти тесты?

Если вы добавите следующую строку в файл с именем Application.cfm и корнем каталога, он должен работать.

<cfapplication name="test_app" sessionmanagement="true">

Я проверил ваши два файла, и без Application.cfm он сломался, с его присутствием он работает нормально.

0 голосов
/ 20 августа 2011

Я думаю, что Ян находится на правильном пути с его наблюдением, что для использования переменных сеанса необходимо включить управление сеансом, однако я думаю, что предложение использовать Application.cfm для этого немного анахронично.

Если кто-то использует версию CF начиная с CFMX7 и выше, рекомендуемый способ управления структурой приложения - через Application.cfc, и эквивалент кода Яна будет:

<cfcomponent>

    <cfset this.name = "test_app">
    <cfset this.sessionManagement = true>

</cfcomponent>
...