Как реализовать единый вход для разных приложений ColdFusion, работающих на одном сервере?

У меня есть несколько приложений CF, работающих на одном сервере под одним и тем же доменным именем. Одно из них, назовем его Портал , предназначено для единой регистрации для других приложений, которые назовем Atlas и P-Body . Обычно вы устанавливаете некоторые переменные в области сеанса для обработки информации о входе в систему:

function Login()
{
    session.auth = structNew();
    session.auth.isLoggedIn = true;
    session.auth.id = GetCurrentUserId();
}

Но область сеанса совместно используется только в одном приложении, а не на всем сервере. Это означает, что любой пользователь, который входит в портал , останется в системе, но если они попытаются перейти к Atlas или P-Body , им придется подписаться снова.

В этом случае, как мне «поделиться» областью сеанса, чтобы все приложения на сервере могли получить к ней доступ? Единственный способ, который я смог придумать, - это использовать клиентские переменные и настроить хранилище данных таким образом, чтобы оно совместно использовалось приложениями. Затем код выглядит следующим образом:

function Login()
{
    client.auth = structNew();
    client.auth.isLoggedIn = true;
    client.auth.id = GetCurrentUserId();
}

function Logout()
{
    structDelete(client, "auth");
}

Здесь нужно следить за тем, что, поскольку переменная клиента не очищается в конце сеанса, мы должны вручную очистить ее в обработчике OnSessionEnd .

Это лучший способ обработки единого входа в ColdFusion? Если да, то есть ли какие-либо недостатки в использовании клиентской переменной или подводные камни, которых следует остерегаться?

Обновление: Я только что протестировал метод клиентской переменной, и похоже, что это только hitcount , timecreated , lastvisit и urltoken совместно используются приложениями, так что я вернулся к квадрату 1.

7
задан Dan Short 16 September 2011 в 01:37
поделиться