У нас есть приложение 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 удаляется, а не освобождается.Снова только удалите предмет из магазина, но не отпускайте его.