Надежность предупреждения об истечении времени ожидания сеанса ASP - PullRequest
1 голос
/ 29 октября 2010

Я хочу предупредить пользователя, когда истекло время его сеанса (у меня странные проблемы с таймаутом), и я нашел следующий код:

<% 
advanceWarning = 2 
jsTimeout = (session.timeout - advanceWarning) * 60000 
%> 
<script> 
window.setTimeout("alert('Session is about to expire');",<%=jsTimeout%>); 
</script>

Это надежно?

Ответы [ 3 ]

2 голосов
/ 06 декабря 2010

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

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

1 голос
/ 11 декабря 2010

В классическом ASP сеанс управляется с помощью файлов cookie.Вы можете увидеть больше документации по этому вопросу здесь: http://w3schools.com/asp/asp_ref_session.asp. Раньше я часто пользовался этим сайтом.Если вы хотите больше контролировать состояние сеанса пользователя, вы можете получить прямой доступ к файлам cookie (через Request.Cookies и Response.Cookies).http://w3schools.com/asp/asp_ref_response.asp. Это может быть лучшим решением в некоторых ситуациях, в зависимости от того, сколько контента вы пытаетесь сохранить и как долго вы хотите, чтобы оно сохранялось.Если вы не хотите, чтобы сеанс обновлялся как «скользящее окно», вы всегда можете установить переменную отметки времени либо в сеансе, либо в коллекции файлов cookie, и таким образом получить больший контроль над временем ожидания.Одним из преимуществ использования файлов cookie напрямую является то, что вы можете получить доступ к файлам cookie напрямую с помощью javascript и избежать ситуации с кодом спагетти.Поскольку я не знаю вашей конечной цели, я не могу точно сказать, будет ли это полезно для вас, но javascript window.setInterval создает повторяющийся вызов функции и может использоваться для выполнения асинхронных обратных вызовов для мониторинга состояния сеанса.Однако, если все, что вы хотите сделать, это выдать предупреждение alert(), это, вероятно, излишне, и существующий код будет работать нормально.

0 голосов
/ 13 декабря 2010

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

...