Тайм-аут уведомления Telerik проблема с браузером мульти вкладки - PullRequest
0 голосов
/ 22 января 2019

Когда пользователь открывает сайт в двух вкладках (один и тот же браузер). Затем пользователь работает в первой открытой вкладке в течение 5 минут (время, установленное для тайм-аута), сессия истекает, потому что вторая вкладка осталась без действия (появится telerik: RadNotification).

Одинаковый идентификатор сеанса используется для обеих вкладок. Использование SessionState mode = "InProc".

Как избежать такого поведения и иметь возможность открывать несколько вкладок?

1 Ответ

0 голосов
/ 23 января 2019

Кажется, вы установили время сеанса равным 5 минутам. Независимо от того, что вы пытаетесь, тайм-аут сеанса произойдет через 5 минут.

Один из способов, которым вы можете попытаться, - сделать так, чтобы срок действия выдвигался. Таким образом, время вашего сеанса будет перемещено на 5 минут после каждого взаимодействия со страницей.

Но даже в этом случае, если вы открываете несколько вкладок и ничего не делаете на какой-либо из вкладок, срок действия вашего сеанса истекает, поскольку время ожидания сеанса основано на файлах cookie и, как правило, во всех современных браузерах файлы cookie совместно используются на вкладках.

Сессия истекает, если обратная передача не происходит в течение времени ожидания сеанса. Вы должны быть уверены, что какая-то информация отправляется на сервер, чтобы поддерживать сеанс.

Одним из решений является метаобновление, как объяснено в этом блоге. :

В мастер-файл входят:

<IFRAME ID="KeepAliveFrame" src="KeepSessionAlive.aspx" frameBorder="0" width="0" height="0" runat="server"></IFRAME>

KeepSessionAlive.aspx:

<meta id="MetaRefresh" http-equiv="refresh" content="21600;url=KeepSessionAlive.aspx" runat="server" />
<script language="javascript">
   window.status = "<%=WindowStatusText%>";
</script>

KeepSessionAlive.aspx.cs

protected string WindowStatusText = "";

protected void Page_Load(object sender, EventArgs e)
{
   if (User.Identity.IsAuthenticated)
   {
      // Refresh this page 60 seconds before session timeout, effectively resetting the session timeout counter.
      MetaRefresh.Attributes["content"] = Convert.ToString((Session.Timeout * 60) - 60) + ";url=KeepSessionAlive.aspx?q=" + DateTime.Now.Ticks;
      WindowStatusText = "Last refresh " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...