Он просто должен быть в пути к классам (также убедитесь, что он попадает под / WEB-INF / classes в .war как часть сборки).
Для MVC4 используйте следующий код:
System.Web.SessionState.SessionIDManager manager = new System.Web.SessionState.SessionIDManager();
HttpContext Context = System.Web.HttpContext.Current;
string oldId = manager.GetSessionID(Context);
string newId = manager.CreateSessionID(Context);
bool isAdd = false, isRedir = false;
manager.SaveSessionID(Context, newId, out isRedir, out isAdd);
HttpApplication ctx = (HttpApplication)System.Web.HttpContext.Current.ApplicationInstance;
HttpModuleCollection mods = ctx.Modules;
System.Web.SessionState.SessionStateModule ssm = (SessionStateModule)mods.Get("Session");
System.Reflection.FieldInfo[] fields = ssm.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
SessionStateStoreProviderBase store = null;
System.Reflection.FieldInfo rqIdField = null, rqLockIdField = null, rqStateNotFoundField = null;
foreach (System.Reflection.FieldInfo field in fields)
{
if (field.Name.Equals("_store")) store = (SessionStateStoreProviderBase)field.GetValue(ssm);
if (field.Name.Equals("_rqId")) rqIdField = field;
if (field.Name.Equals("_rqLockId")) rqLockIdField = field;
if (field.Name.Equals("_rqSessionStateNotFound")) rqStateNotFoundField = field;
}
object lockId = rqLockIdField.GetValue(ssm);
if ((lockId != null) && (oldId != null)) store.ReleaseItemExclusive(Context, oldId, lockId);
rqStateNotFoundField.SetValue(ssm, true);
rqIdField.SetValue(ssm, newId);
Рассматривали ли вы использование метода HttpSessionState.Abandon ? Это должно все прояснить. Затем запустите новый сеанс и заполните его всеми элементами, которые вы сохранили из приведенного выше кода.
Session.Abandon ();
должно хватить. В противном случае вы могли бы попытаться пройти лишнюю милю, добавив еще несколько вызовов, если он все еще упрям:
Session.Contents.Abandon();
Session.Contents.RemoveAll();
Не могли бы вы просто установить:
<sessionState regenerateExpiredSessionId="False" />
в web.config, а затем использовать решение, предложенное Ахмадом?