2010-07-29 57 views
1

这是简单的xslt,它显示当前用户的登录状态。在开发服务器上一切正常,但是一旦我们在生产环境中设置了应用程序,umbraco.librarty.IsLoggedOn()就会始终返回false。Umbraco.Library.IsLoggedOn()不适用于XSLT

应用程序使用.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看到,如果你是会员或访客。

也许这是Cookie和XSLT的问题?任何人都有线索? TNX

回答

0

好吧,这是解决我的问题。

会话不能从xslt获得,也不能从试图从代码隐藏访问会话的ascx控件提供。我们的应用程序使用asp.net webservice的99%,标记为[WebMethod(EnableSession = true)]的方法。在这些方法中,会话是可用的。这让我觉得会话实际上在网站上被禁用了。

一些google搜索后,我发现我有这个属性添加到web.config文件:

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"> 

显然,在我们的发展在machine.config具有这种性质为默认,和生产服务器没't,所以需要在web.config中进行更改。

2

变化

<xsl:when test="umbraco.library:IsLoggedOn() = true()"> 

<xsl:when test="umbraco.library:IsLoggedOn()"> 
+0

嗨riffnl,tnx为你解答。最初它只是IsLoggedOn(),然后,我通过Umbraco论坛上的建议将它更改为IsLoggedOn()= test()。 – 2010-07-30 16:09:11

+0

您可以添加IsLoggedOn()来输出:来查看实际值是什么? – riffnl 2010-08-01 11:17:40

+0

实际值为'假'。但是,这是配置问题,而不是xslt。请参阅下面的答案。 TNX寻求帮助 – 2010-08-02 09:32:32

相关问题