Sitecore 8.0 からコンテンツデリバリーサーバーが複数台構成(ファーム構成)の場合は、Session_Endイベントをサポートするセッション状態プロバイダーを使用する必要があります。Sitecore標準で提供されるInProc以外のセッションプロバイダーはMongoDBまたはSQL Serverを使用する2種類のセッション状態プロバイダーがあります。Sharedセッションに関しては、CDサーバーが複数台構成の場合は、InProcのセッションプロバイダーはサポートされないことも注意が必要です。
もう一つ重要な点として、Sitecore XPではいわゆるASP.NETのセッションに加えて、Sharedセッションという考え方が存在します。両者を区別するために、ASP.NETのセッションをPrivateセッションと呼んでします。
つまり、Sitecoreでは 従来から存在するPrivateセッション用のセッションデータベースと、Sharedセッション用のセッションデータベースが必要になります。
それぞれのセッションの目的についてはここでは説明しません。詳細は次のURLを参照してください。
Session state
https://doc.sitecore.net/sitecore_experience_platform/xdb_configuration/session_state
セッションが2つといってもSitecoreが標準で提供するセッションプロバイダーは1つのSQL Serverのデータベースもしくは1つのMongoDBのデータベースでPrivateとSharedセッションは共存できます。PrivateとShared用に接続文字列を分けることで、別々のSQLServerのデータベースもしくはMognoDBのデータベースをPrivate用およびShared用専用のセッションデータベースとして使用することもできます。
今回は、SQL Serverをセッションデータベースとして使用するように構成してみます。正式な手順は次のURLを参照してください。
Configuring session database servers
https://doc.sitecore.net/sitecore_experience_platform/xdb_configuration/configuring_session_database_servers
1.セッションデータベースの準備
Sitecoreのインストーラーを使用してSitecoreのデータベースをセットアップすると Sessionsという名前のデータベースが作成されます。そのデータベースがPrivateもしくはSharedセッションを格納するときに使用するデータベースです。今回はインストーラーを使用してインストールされるデータベースをそのまま使用します。
2.コンテンツ配信サーバーでの構成
ファーム構成の各CDサーバーでセッションプロバイダーの設定を実装していきます。手順は特に難しくはありません。
2.1 接続文字列の設定
コンテンツデリバリーサーバーのConnectionStrings.config を開き、sessionという名前でセッションデータベースへの接続文字列を設定してください。
例えば次ように設定します。接続文字列は適当ですので適宜変更してください。
<add name="session" connectionString="user id=[ユーザー名];password=[パスワード];Data Source=[SQLInstance];Database=[xxxxxx_Sessions]" />
2.2コンテンツ配信でのセッションプロバイダーの設定
各コンテンツデリバリーサーバー(CDサーバー)のWeb.config と Sitecore.Analytics.Tracking.config で SqlSessionStateProviderを使用する設定を行います。
Web.configの<sessionState>..</sessionState> のセクションを見つけて、Sitecoreが提供するSqlSessionStateProviderを設定するようにします。
<sessionState mode="Custom" customProvider="mssql" cookieless="false" timeout="20" sessionIDManagerType="Sitecore.FXM.SessionManagement.ConditionalSessionIdManager"> <providers> <add name="mssql" type="Sitecore.SessionProvider.Sql.SqlSessionStateProvider, Sitecore.SessionProvider.Sql" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true"/> </providers> </sessionState>
実際には、インストーラーを使用してインストールするとプロバイダーの定義はされているので、必要に応じて接続文字列などを変更して、sessionStateノードの modeを Customに、customProviderをmssqlに変更するだけでOKです。
続いて、 Sitecore.Analytics.Tracking.configの<sharedSessionState></sharedSessionState>ノードを見つけて、SqlSessionStateProviderの定義をprovidersに追加し、 defaultProviderに mssql を設定します。以下のサンプルは設定例です。
<sharedSessionState defaultProvider="mssql"> <providers> <clear/> <add name="mssql" type="Sitecore.SessionProvider.Sql.SqlSessionStateProvider,Sitecore.SessionProvider.Sql" connectionStringName="session2" pollingInterval="2" compression="true" sessionType="shared"/> </providers> <!-- 省略 --> </sharedSessionState>
プロバイダーに設定できるパラメーターの説明は、先頭の方で紹介した、Configuring session database servers のリンク先に説明が載っています。
3.動作確認
実際に、コンテンツデリバリーサーバーにアクセスすると SessionsデータベースのApplicationとSessionStateにレコードが追加されます。
Applicationには、SharedとPrivateを区別するためのレコードが2つ作成されていることが分かります。それぞれ、standardとsharedという名前が付けられています。
Applicationテーブルには、sharedもしくはstandardという名前のレコードが存在しない場合に自動的にGetApplicationIdプロシージャにより、レコードが作成されます。そのためIdは環境ごとに異なります。
SessionStateテーブルには次のようにプライベートと共有セッション用のレコードが挿入されます。プライベートか共有セッション化はApplicationのGUIDで区別され、Id列には共有セッションの場合はコンタクトのID、プライベートセッションのレコードにはセッションキーが使用されます。
4.まとめ
簡単ですが、SQLのデータベースを使用するセッションプロバイダーの設定例と登録されるセッションデータのサンプルをご紹介しました。
さんのコメント: さんのコメント: