Это - простой xslt, который показывает состояние входа в систему текущего пользователя. Все хорошо работало на сервере разработки, но после того как у нас есть приложение установки на производстве, umbraco.librarty. IsLoggedOn () начинал всегда возвращать false.
Приложение использует метод umbraco.libraty. IsLoggedOn () из кода.NET и оттуда это возвращает собственное значение, но от xslt не делает.
<xsl:choose>
<xsl:when test="umbraco.library:IsLoggedOn() = true()">
You are logged in as
<q>
<xsl:variable name="user" select="umbraco.library:GetCurrentMember()/@loginName"/>
<xsl:value-of select="$user"/>
</q>. This is <a href="/profile">your profile</a>.
</xsl:when>
<xsl:otherwise>
You are not logged in.
<a href="/registruj-se">Log in</a>.
</xsl:otherwise>
</xsl:choose>
Для non-umbraco разработчиков: библиотека. IsLoggedOn () функция проверяет HttpContext. Текущий. Пользователь и HttpContext. Текущий. Пользователь. Идентификационные данные. IsAuthenticated, чтобы видеть, зарегистрированы ли Вы или нет.
Возможно, это - проблема с cookie и XSLT? У кого-либо есть подсказка? Tnx
Хорошо, это решение моей проблемы.
Сеанс не был доступен ни из xslt, ни из элемента управления ascx, который пытался получить доступ к сеансу из внутреннего кода. Наше приложение на 99% использует веб-сервис asp.net с методами, отмеченными [WebMethod (EnableSession = true)]. Внутри этих методов был доступен сеанс. Это заставило меня подумать, что сеанс фактически отключен на веб-сайте по умолчанию.
После некоторого поиска в Google я обнаружил, что мне нужно добавить это свойство в файл web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
По-видимому, в файле machine.config в нашей разработке это свойство было по умолчанию, а на рабочем сервере - нет, поэтому он нужно было изменить в web.config.
Change
<xsl:when test="umbraco.library:IsLoggedOn() = true()">
to
<xsl:when test="umbraco.library:IsLoggedOn()">