Невозможно предотвратить истечение сеанса в asp.net - PullRequest
0 голосов
/ 26 сентября 2019

У нас есть приложение asp.net, которое использует

1) В управлении сессионным состоянием proc и

2) Аутентификация с помощью форм

И состояние сеанса, и таймауты аутентификации на основе форм имеютбыло установлено на 20 минут.Проверка подлинности с помощью форм установлена ​​на скользящее истечение срока действия true.

<system.WebServer>
  <handlers>
     <remove name="KeepAlive" />
     <add name="KeepAlive" verb="GET" path="AJAXKeepAlive.ashx" 
          type="IRCoder.AJAXKeepAlive" preCondition="integratedMode"/>
  </handlers>
</system.WebServer>

<authentication mode="Forms">
     <forms name=".Auth" loginUrl="Login.aspx" slidingExpiration="true" 
             protection="All" timeout="20"></forms>
</authentication>
<sessionState cookieName="ssid" mode="InProc" cookieless="false" timeout="20"/>

У меня есть обработчик поддержки активности, который вызывается на главной странице при каждом обновлении страницы.

public class AJAXKeepAlive : IHttpHandler, IRequiresSessionState
{        
    public void ProcessRequest(HttpContext context)
    {
        context.Session["KeepAlive"] = DateTime.Now;            
    }

    public bool IsReusable
    {
       get
       {
          return false;
       }
     }
}

In Master page:
$.get("<%=ResolveUrl("~/")%>AJAXKeepAlive.ashx");

Проблема: При отладке в моем локальном компьютере с использованием Visual Studio iis Express метод session_end в global.asax.cs всегда вызывается автоматически по истечении 20 минут, даже если я обновляю страницу несколько раз.

Я предполагаю, что, когда я совершаю поездку на сервер / IIS, таймер сеанса будет сброшен и истечет только после 20 минут бездействия.Это не вариант.Я был очень активен на сайте, но все еще вызывается метод session_end.

То, что я пробовал:

Я разместил приложение на IIS на нашем сервере разработчиков.Я установил свойство времени ожидания сеанса IIS равным 30 минутам.Я также обновил время ожидания простоя пула приложений IIS до 30 минут.

Даже в этом случае сеанс заканчивается через 20 минут.

Мне не удается сделать слайд сессии, как обычно, после каждого запроса страницы.Любые указатели здесь очень ценятся.

Решение / Редактирование:

После долгого исследования мы обнаружили, что восстановление идентификатора сеанса во время входа пользователя в системувызывает проблему.

Дальнейшее обновление:

Мне удалось полностью решить эту проблему.Пожалуйста, используйте код c # в ссылке ниже: https://stackoverflow.com/a/56391868/3189880 На этой странице есть и другие ответы, но работает тот, где oldId удаляется, а не освобождается.Снова только удалите предмет из магазина, но не отпускайте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...