我正在尝试在Sitecore 8.1中启动并运行基本布局,并且我遇到了一个错误,我可以找到很少的信息。在尝试查看任何页面(甚至是后端界面或从Sitecore Rocks连接)时,我收到消息“找不到会话ID管理器来管理当前请求的会话ID。”
一些谷歌搜索表明,这与现成的会话提供商的一些问题有关,并建议将其交换出来以保持Mongo中的会话。 Sitecore的文档提供了对shared和private会话的描述。我试图实现这些但继续收到同样的错误。
这是我现在的代码:
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 session
和use sharedsession
在其中创建了session和sharedsession数据库,我理解这是在Mongo中创建数据库的方法。
我在这里遗漏了什么吗?或者错误是不是意味着我的意思呢?
答案 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。