Как бы вы сохранили пользователя вошли, когда есть Multpile Application.cfc - PullRequest
1 голос
/ 19 июня 2019

Я унаследовал старое приложение Coldfusion.Это приложение имеет основной сайт и 7 под-сайтов.Основной сайт и каждый суб-сайт имеют свои собственные Application.cfc.

Очень похоже на этот пример на сайте Adobe (график справа внизу для Bandwith Associates): https://helpx.adobe.com/coldfusion/developing-applications/developing-cfml-applications/designing-and-optimizing-a-coldfusion-application/structuring-an-application.html

Я создал систему аутентификации, которая будет регистрировать пользователя наОсновной уровень через переменные сеанса.Однако когда они щелкают или перемещаются на любой из дочерних сайтов, все переменные сеанса исчезают.Как и должно быть, поскольку Coldfusion не ищет никаких других файлов application.cfc, когда находит его в текущем каталоге, где находится пользователь.

Надеюсь, мне не нужно идти и удалять 7 файлов application.cfc с каждого подузла.Потому что это будет включать в себя переписывание каждого под сайтаЯ просто хочу, чтобы они могли оставаться в системе (и не должны входить в несколько подпрограмм.

Код не нужен. Мне просто нужен план высокого уровня, который будет работать. В конечном счете, я буду его реализовывать наодин подчиненный сайт, чтобы увидеть, работает ли он. Если это так, то я реализую его на остальных подчиненных сайтах.

Ожидаемый результат должен состоять в том, чтобы пользователь оставался в системе во время сеанса независимо от того,на какой из 7 дочерних сайтов они переходят во время процесса. Все они имеют одинаковый внешний вид и, таким образом, довольно просты для конечного пользователя.

Дополнительные сведения: этот сайт имел аутентификацию Windows иТеперь мы идем с типичным процессом входа в приложение.

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Область сеанса может совместно использоваться с использованием одного и того же имени приложения для каждого Application.cfc или Application.cfm.

Application.cfc

Помещенный

<cfset THIS.name = "my_app">

в теле всех ваших файлов Application.cfc. (Не размещайте его внутри функции!)

Application.cfm

Используйте тег <cfapplication>

<cfapplication name="my_app">

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

Примечание: my_app, очевидно, только пример. Вы можете использовать любое имя, но я предлагаю сохранить его буквенно-цифровым и длиной не более 32 символов. В Adobe ColdFusion есть странные ошибки при использовании «экзотических» имен приложений.

1 голос
/ 19 июня 2019

Вы можете иметь одну основную Application.cfc, которая помогает контролировать остальные.Согласно ответу @ Alex, вы можете просто назвать их одинаковыми именами Application, но вы можете столкнуться с ситуациями, когда определенные переменные должны быть загружены раньше других.При таком подходе только корень Application.cfc будет определять имя приложения.

Application.cfc
ApplicationProxy.cfc (extends Application.cfc)
/App2/Application.cfc (extends ../ApplicationProxy.cfc
/App3/Application.cfc (extends ../ApplicationProxy.cfc
... etc ...

Если ваше основное загрузочное ядро ​​имеет общие переменные application, вы можете иметь каждый из подфайлов, вызывающий super.onApplicationStart() в их onApplicationStart(), чтобы гарантировать, что эти переменные загружены, если эта папка является первой точкой входа для приложения после перезапуска сервера.

Вы можете сделать то же самое для onSessionStart() и других функций по мере необходимости.Я сделал это, когда мы обновили базу кода с помощью более десятка приложений подпапок, которые должны были обмениваться новыми глобальными объектами сеанса и другими заметными данными.

Вы можете проверить статью Бена Наделя об этом процессе .

...