Я нашел это поведение случайно, так как я возвращаю количество элементов в сеансе в сообщении об ошибке и обнаружил, что в некоторых сеансах было до 120 элементов (они должны иметь 1 !). В ходе дальнейшего расследования я обнаружил, что каждый запрос, кажется, добавляет элемент в сеанс. Это все отрицательные целые числа, например -710, -140 -528. Кажется, я не вижу шаблона в том, что число приходит.Новый элемент, добавленный в сеанс по каждому запросу
Я проверил свой код для любых взаимодействий с объектом Session, и насколько я могу судить, это не я. Я храню один элемент в сеансе, который является моим собственным объектом, который имеет на нем ряд других свойств. Мое состояние сеанса - это SQL-сервер, и я только сериализую определенный набор значений, которые необходимо сохранить.
Кто-нибудь видел что-нибудь подобное или имеет какие-либо советы о том, где я могу устранить неисправность?
Заранее спасибо.
- Редактировать в соответствии с запросом - сначала, когда я подсчитываю элементы в сеансе - это делается в событии загрузки страницы моей главной страницы. Я петлю, чтобы проверить, используя отладчик.
int itemCount = Session.Count;
for (int i = 0; i < itemCount; i++)
{
object o = Session[i];
}
- здесь я добавляю свой пользовательский объект к сеансу. Это называется в начале сеанса и на моей главной странице. Он работает на принципе «получить, но если не там, создать».
HttpSessionState Session = HttpContext.Current.Session;
HttpRequest Request = HttpContext.Current.Request;
if (Session == null)
return null;
SessionData sessionData = (SessionData)Session[StaticNames.SESSION_NAME];
if (sessionData == null)
{
sessionData = new SessionData();
Session.Add(StaticNames.SESSION_NAME, sessionData);
}
У меня также есть это, чтобы получить объект SessionData из сессии:
public SessionData(SerializationInfo info, StreamingContext ctxt)
{
this.IsManualLogin = (bool)info.GetValue("IsManualLogin", typeof(bool));
this.HasAskedUserForLocation = (bool)info.GetValue("HasAskedUserForLocation", typeof(bool));
// ... etc, more items for all users here
int? loginID = null;
try
{
loginID = info.GetInt32("LoginID");
}
catch
{
return;
}
this.LoginID = loginID.Value;
// ... etc, more items for logged in users only
}
Существует также эквивалентный метод добавления этих данных в SerializationInfo используется для SqlSessionState.
Можете ли вы показать код, в котором вы показываете количество элементов в сеансе? И код, который добавляет элемент в сеанс (контекст вокруг этого важен, поэтому обязательно указывайте, откуда этот код вызывается)? – jadarnel27
Спасибо Ядарнелю, я отправил много кода, другие вопросы, пожалуйста, не стесняйтесь спрашивать. На самом деле я собираюсь немного отредактировать его, вам действительно не нужно видеть КАЖДЫЙ элемент, который я придерживаюсь там ... –
Значения этих записей изгоев сессии являются отрицательными целыми числами? Каковы ключи для этих записей? Это может быть ключом к тому, что не так. Спасибо за ваш быстрый ответ при добавлении кода, кстати. – jadarnel27