sreeharijakkala Ответов: 0

Asp.net пользовательское событие поставщика состояний сеанса вызывается несколько раз


Ниже события, вызывающие несколько раз:
public override SessionStateStoreData GetItemExclusive(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actionFlags) 
{
    return GetSessionStoreItem(true, context, id, out locked, out lockAge, out lockId, out actionFlags); 
}

public override void ReleaseItemExclusive(HttpContext context, string id, object lockId) {
    string tmpQuery = @"UPDATE Sessions SET Locked = 0, Expires = @expires@ WHERE SessionId = '@sess_id@' AND ApplicationName = '@app_name@' AND LockId = '@lock_id@'";

    tmpQuery = tmpQuery.Replace("@expires@", convDate_forQuery(DateTime.Now.AddMinutes((double)(pConfig.Timeout.Minutes))));
    tmpQuery = tmpQuery.Replace("@sess_id@", id);
    tmpQuery = tmpQuery.Replace("@app_name@", ApplicationName);
    tmpQuery = tmpQuery.Replace("@lock_id@", lockId.ToString());

    try
    {
        SessDataAccess.ExecuteNQ(tmpQuery);
    }
    catch (Exception e)
    {
        if (WriteExceptionsToEventLog)
        {
            WriteToEventLog(e, "ReleaseItemExclusive");
            throw (e);
        }
        else
            throw e;
    }
}

Журнал событий:
  • 2/20/2020 1:40:43 PM:GetItemExclusive
  • 2/20/2020 1:40:43 PM:GetItemExclusive
  • 2/20/2020 1:40:43 PM:GetItemExclusive
  • 2/20/2020 1:40:43 PM:GetItemExclusive
  • 2/20/2020 1:40:43 PM:GetItemExclusive
  • 20-02-2020 13:40:43:инициализация
  • 2/20/2020 1:40:43 PM:GetItemExclusive
  • 2/20/2020 1:40:43 PM:ReleaseItemExclusive
  • 2/20/2020 1:40:43 PM:ReleaseItemExclusive
  • 2/20/2020 1:40:43 PM:ReleaseItemExclusive
  • 2/20/2020 1:40:43 PM:ReleaseItemExclusive
  • 2/20/2020 1:40:43 PM:ReleaseItemExclusive
  • 2/20/2020 1:40:43 PM:ReleaseItemExclusive

Может ли кто - нибудь помочь мне в этом! заранее спасибо.

Что я уже пробовал:

Я пытался вести логи, сколько раз он звонил

Richard Deeming

tmpQuery = tmpQuery.Replace("@expires@", convDate_forQuery(DateTime.Now.AddMinutes((double)(pConfig.Timeout.Minutes))));

Не делай этого так!

Ваш код почти наверняка уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

Вам нужно обновить свой SessDataAccess класс так что это Не принудительно вводить значения параметров непосредственно в запрос.

0 Ответов