这是简单的xslt,它显示当前用户的登录状态。在开发服务器上一切正常,但是一旦我们在生产环境中设置了应用程序,umbraco.librarty.IsLoggedOn()就会始终返回false。
应用程序使用.NET代码中的方法umbraco.libraty.IsLoggedOn()并从那里返回正确的值,但是从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>
对于非umbraco开发人员:library.IsLoggedOn()函数检查HttpContext.Current.User和HttpContext.Current.User.Identity.IsAuthenticated以查看您是否已登录。
可能是cookies和XSLT存在问题?有人有线索吗? TNX
答案 0 :(得分:2)
更改
<xsl:when test="umbraco.library:IsLoggedOn() = true()">
到
<xsl:when test="umbraco.library:IsLoggedOn()">
答案 1 :(得分:0)
好的,这是我的问题的解决方案。
xslt无法提供会话,也没有尝试从代码隐藏访问会话的ascx控件。我们的应用程序99%使用asp.net webservice,方法标有[WebMethod(EnableSession = true)]。在这些方法中,会话可用。这让我觉得默认情况下会在网站上禁用会话。
经过一些谷歌搜索,我发现我必须将此属性添加到web.config文件:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
显然,我们开发中的machine.config默认使用此属性,生产服务器没有,因此需要在web.config中进行更改。