У меня есть несколько приложений 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.