Sitecore 8.1错误:“找不到会话ID管理器来管理当前请求的会话ID”

时间:2015-12-10 14:45:25

标签: mongodb session sitecore sitecore8.1 sitecore-fxm

我正在尝试在Sitecore 8.1中启动并运行基本布局,并且我遇到了一个错误,我可以找到很少的信息。在尝试查看任何页面(甚至是后端界面或从Sitecore Rocks连接)时,我收到消息“找不到会话ID管理器来管理当前请求的会话ID。”

一些谷歌搜索表明,这与现成的会话提供商的一些问题有关,并建议将其交换出来以保持Mongo中的会话。 Sitecore的文档提供了对sharedprivate会话的描述。我试图实现这些但继续收到同样的错误。

这是我现在的代码:

APP_CONFIG /包含/ MongoSessionProvider.config

<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <tracking>
      <sharedSessionState>
        <providers>
          <clear/>
          <add name="mongo" type="Sitecore.SessionProvider.MongoDB.MongoSessionProvider, Sitecore.SessionProvider.MongoDB" connectionString="session" pollingInterval="2" compression="true" sessionType="shared"/>
        </providers>
      </sharedSessionState>
    </tracking>
  </sitecore>
</configuration>

App_Config / Include / ConnectionStrings.config(摘录)

<add name="session" connectionString="mongodb://localhost/sharedsession" />

Web.config(摘录)

<sessionState mode="Custom" cookieless="false" timeout="20" sessionIDManagerType="Sitecore.FXM.SessionManagement.ConditionalSessionIdManager" customProvider="mongo">
  <providers>
    <add name="mongo" type="Sitecore.SessionProvider.MongoDB.MongoSessionStateProvider, Sitecore.SessionProvider.MongoDB" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true" />
    <add name="mssql" type="Sitecore.SessionProvider.Sql.SqlSessionStateProvider, Sitecore.SessionProvider.Sql" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true" />
  </providers>
</sessionState>

请注意,这是在我的本地开发计算机上。我有Mongo运行(并确认它与Sitecore的连接),我使用use sessionuse sharedsession在其中创建了session和sharedsession数据库,我理解这是在Mongo中创建数据库的方法。

我在这里遗漏了什么吗?或者错误是不是意味着我的意思呢?

2 个答案:

答案 0 :(得分:6)

您看到的消息不应该是错误,而是日志警告。它与检索会话ID管理器的配置有关,而不是与会话本身的配置相关。

为什么会出现此警告

<pipelines>下的 Sitecore.config 中,定义了getSessionIdManager管道。

<getSessionIdManager>
</getSessionIdManager>

Sitecore.FXM.config 中,为此管道配置了处理器:

<getSessionIdManager>
  <processor type="Sitecore.FXM.Pipelines.ChooseSessionIdManager.FXMSessionIdManagerProcessor, Sitecore.FXM" />
</getSessionIdManager>

此管道允许为请求动态选择会话ID管理器。在默认的Sitecore配置中,非默认会话ID管理器仅用于具有明确sessionId URL参数的请求,即仅用于FXM请求。

对于所有其他请求,将不会显式选择任何会话ID管理器,并将使用默认的System.Web.SessionState.SessionIDManager;这反映在您看到的警告信息中。这种情况本身没有任何问题,这是默认设计。

在每个页面请求中将消息视为错误

对我来说这听起来确实是个缺陷。此消息应该在每个应用程序生存期内记录一次,而不是在每个页面上作为异常抛出。

您应该将此报告给Sitecore支持。

尝试修复

我无法调试你的系统,所以我必须蒙住眼睛。我会尝试创建自己的会话ID管理器选择器:

public class CustomSessionIdManagerProcessor
{
    public void Process(GetSessionIdManagerArgs args)
    {
        if(args.SessionIdManager == null)
        {
            args.SessionIdManager = new System.Web.SessionState.SessionIDManager();
        }
    }
}

将其配置为getSessionIdManager管道中的最后处理器。这将确保始终显式选择的会话ID管理器,并希望能够防止错误发生。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <getSessionIdManager>
        <processor type="YourNamespace.CustomSessionIdManagerProcessor, YourAssembly" />
      </getSessionIdManager>
    </pipelines>
  </sitecore>
</configuration>

答案 1 :(得分:3)

如果它对其他任何人有帮助,我们在升级到Sitecore 8.1 rev之后也遇到了这个问题。 151003。

在我们的特定情况下,问题是 Web.config 中此行中的命名空间更改:

<sessionState mode="InProc" cookieless="false" timeout="20"
 sessionIDManagerType="Sitecore.FXM.SessionManagement.ConditionalSessionIdManager">

应该如下:

<sessionState mode="InProc" cookieless="false" timeout="20"
 sessionIDManagerType="Sitecore.SessionManagement.ConditionalSessionIdManager">

这可能是我们在升级指南中遗漏的内容,但我们在下载了 Sitecore 8.1 rev的副本之后找到了它。 151003.zip 来自the downloads page