Abandoning the ASP.NET User Session in Sitecore with OMS
August 28, 2010 Leave a comment
Be careful when clearing out a user’s ASP.NET session, if you’re using Sitecore OMS. If programmatically clearing one’s session using code similar to one or all of the following:
Context.Session.Abandon();
HttpContext.Current.Request.Cookies.Remove("ASP.NET_SessionId");
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", string.Empty));
You may notice that in your Sitecore logs, you’ll have entries that match:
Violation of PRIMARY KEY constraint ‘PK_Session_1′. Cannot insert duplicate key in object ‘dbo.Session’.
The primary key violation is an indicator that you’ve cleared out the users ASP.NET session, but neglected to also clear the Analytics Session as well. Since both sessions are so tightly bound in the Analytics data (just take a look at the table schema for the table Sessions), breaking this relationship will cause loss of data.
All recording of page events via OMS produce errors for the given session after hitting the piece of code to abandon the ASP.NET session. You lose all Analytics tracking due to this error, which means any pages a user visits after abandoning the ASP.NET session will be lost.
The Fix
In addition to clearing the ASP.NET session, also clear the Analytics session:
HttpContext.Current.Request.Cookies.Remove("SC_ANALYTICS_SESSION_COOKIE");
Response.Cookies.Add(new HttpCookie("SC_ANALYTICS_SESSION_COOKIE", string.Empty));
Thanks to Sitecore Support for providing the analysis and recommended approach.