Umbraco.Library.IsLoggedOn()在XSLT中不起作用

时间:2010-07-29 10:54:54

标签: xslt umbraco

这是简单的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

2 个答案:

答案 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中进行更改。