Как мне использовать AJAX, чтобы определить, истек ли сеанс пользователя, и затем вернуть его на страницу входа?

StackOverflow https://stackoverflow.com/questions/1638171

Вопрос

В следующем сценарии, как я могу использовать AJAX, чтобы проверить, если сеанс все еще активен, а затем вернуть пользователя на страницу входа?

<Ол>
  • Пользователь входит в систему и начинает работать
  • Пользователь исчезает на 10 минут и время сеанса истекло
  • Пользователь возвращается на свой компьютер и все еще на экране они были 10 минут назад
  • Пользователь представляет свои работы, но вернуться на экран входа в систему (по моя существующая проверка состояния сеанса) и изменения не сохранились
  • В идеале, мне нужен какой-то способ проверки состояния сеанса каждую 1 минуту, чтобы определить, не занят ли пользователь. Если они бездействуют, и сеанс скоро истечет, я временно сохраню их изменения, а затем, когда истечет время сеанса, я автоматически переключу страницу на экран входа в систему, прежде чем пользователь вернется из режима ожидания.

    Возможно ли это сделать без использования setTimeOut ()?

    Это было полезно?

    Решение

    Большинство, если это может быть обработано на стороне сервера.

    Всякий раз, когда происходит активность пользователя на стороне сервера - загрузка страницы, ajax-вызов, что угодно, установите переменную сеанса

    Session["last_activty"]=DateTime.Now;
    

    В ваших вызовах AJAX и загрузке страницы (это можно сделать на главной странице / вложенной главной странице для страниц, требующих аутентификации), установите флажок (псевдокод)

    if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
      Session["logged_in"]=false;
    

    Если загрузка страницы или метод webmethod / webservice определяют на основании вышеизложенного, что время ожидания пользователя истекло, либо

    a) перенаправить на страницу входа (на стороне сервера) или

    b) верните код состояния вашему абоненту ajax, который вызовет перенаправление или отображение диалогового окна входа в систему.

    ПРИМЕЧАНИЕ : остерегайтесь использования реальных переменных сеанса, так как они имеют тенденцию работать плохо / совсем не работать в кластерных серверных средах. Лучшее место для вещей такого типа - в вашей базе данных.

    table Users
    .ID
    .last_activity datetime
    .logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top