Sitecore のSharedとPrivateセッションプロバイダーにMongoSessionStateProviderを使用する

samatsu 2/2/2016 1867 N/A Sitecore XP

Sitecore のSharedとPrivateセッションプロバイダーにSqlSessionStateProviderを使用するで、SQLサーバーをセッションストアとして使用する構成方法を紹介したので、今回は、MongoDBをプライベートおよび共有セッション状態ストアとするMongoSessionStateProviderを構成する方法をご紹介します。

ここではそれぞれのセッションの目的についてはここでは説明しません。詳細は次のURLを参照してください。

Session state
https://doc.sitecore.net/sitecore_experience_platform/xdb_configuration/session_state

MongoSessionStateProviderを構成する手順は実際は、SqlSessionStateProviderを使用する場合と大きな違いはありません。正式な手順は次のURLを参照してください。

Configuring session database servers
https://doc.sitecore.net/sitecore_experience_platform/xdb_configuration/configuring_session_database_servers

MongoDBの場合も、PrivateとSharedセッションは1つのデータベースを共有して使用できます。今回はPrivate,Sharedで共通のデータベースを使用します。もちろん、接続文字列を分けてPrivateとSharedで別々のMongoDBやデータベースを使用することもできます。

1.セッションデータベースの準備

MongoDBに関しては、データベースが存在しないと自動で作成されるので特別な手順は必要ありません。

2.コンテンツ配信サーバーでの構成

ファーム構成の各CDサーバーでセッションプロバイダーの設定を実装していきます。手順は特に難しくはありません。

2.1 接続文字列の設定

コンテンツデリバリーサーバーのConnectionStrings.config を開き、sessionという名前でセッションデータベースへの接続文字列を設定してください。

例えば次ように設定します。接続文字列は適当ですので適宜変更してください。

<add name="session" connectionString="mongodb://[MongoDBのサーバー]/xxxxx_session" />

2.2コンテンツ配信でのセッションプロバイダーの設定

各コンテンツデリバリーサーバー(CDサーバー)のWeb.config と Sitecore.Analytics.Tracking.config で MongoSessionStateProvider を使用する設定を行います。

Web.configの<sessionState>..</sessionState> のセクションを見つけて、Sitecoreが提供するMongoSessionStateProviderを設定するようにします。

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

実際には、インストーラーを使用してインストールするとプロバイダーの定義はされているので、必要に応じて接続文字列などを変更して、sessionStateノードの modeを Customに、customProviderをmongoに変更するだけでOKです。

続いて、 Sitecore.Analytics.Tracking.configの<sharedSessionState></sharedSessionState>ノードを見つけて、MongoSessionStateProviderの定義をprovidersに追加し、 defaultProviderに mssql を設定します。以下のサンプルは設定例です。

<sharedSessionState defaultProvider="mongo">
  <providers>
    <clear/>
    <add name="mongo" type="Sitecore.SessionProvider.MongoDB.MongoSessionStateProvider, Sitecore.SessionProvider.MongoDB" connectionStringName="session" pollingInterval="2" compression="true" sessionType="shared"/>
  </providers>
   <!-- 省略 -->
</sharedSessionState>

プロバイダーに設定できるパラメーターの説明は、先頭の方で紹介した、Configuring session database servers のリンク先に説明が載っています。

3.動作確認

実際に、コンテンツデリバリーサーバーにアクセスすると MongoDBのデータベースにデータベースにドキュメントが登録されます。ドキュメントを確認すると分かりますが、下図のようにsessionsというコレクションの中に、IDがsharedという名前とコンタクトIDで構成されるドキュメントと、IDがstandardといASP.NETセッションのキーで構成されるドキュメントが作成されます。それぞれが共有セッションとプライベートセッションを表します。

4.まとめ

簡単ですが、MongoDBのデータベースを使用するセッションプロバイダーの設定例と登録されるセッションデータのサンプルをご紹介しました。