Как определить, когда пользователи выходят из системы с тайм-аутом сеанса? - PullRequest
0 голосов
/ 05 июля 2018

Я реализую веб-push-уведомления, они работают нормально, за исключением одной проблемы с тайм-аутом сеанса. На нашем веб-сайте пользователи будут выходить из системы после окончания сеанса. Однако в это время пользователь мог закрыть вкладку / браузер. Как определить время истечения сеанса, чтобы я мог прекратить отправку уведомлений этому пользователю.

Обновление: У меня есть сеанс, срок действия которого истечет через 30 минут (sessionState timeout = "30"). Пользователь входит в систему, а затем закрывает вкладку без выхода из системы; через 30 минут он выйдет из системы. Но он все еще получает уведомления.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Я не совсем уверен, что это ответ, но, возможно, он вам поможет.

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

Чтобы добиться этого, просто добавьте следующую строку кода в ваш Global.asax

    protected void Session_End(object sender, EventArgs e)
    {
       //End push notification
    }

Для того, чтобы вы заметили, что пользователь закрывает браузер или нажимает, вам нужен некоторый JavaScript. В моем примере я делаю это с помощью HTTP-запроса, но вы также можете сделать это с некоторыми сокетами или всем остальным.

    function SendPostRequest(eMail) {
    try {
        $.post(
            "/apiacc/sessionend",
            { Value: eMail },
            function (data, status, xhr) {
            }
        );
    } catch (error) {
        //Error catching
    }
}

    function SetInterval(eMail) {
        SendPostRequest(eMail);
        window.setInterval(() => { SendPostRequest(eMail); }, 300000);
    }

И я просто запускаю функцию, когда загружается сайт. Таким образом, JavaScript отправляет каждые 5 минут запрос. Который я сохраняю в базе данных (я использую, например, адрес электронной почты для авторизации). При запуске приложения вы создаете фоновую задачу. Который будет проверять каждые 5 минут, если некоторые из сеанса, не получают звонок в течение последних 5 минут. Таким образом, вы можете завершить сеанс, и будет вызвано событие в вашем global.asax.

Надеюсь, это поможет?

0 голосов
/ 05 июля 2018

Мое предложение,

  1. сохранить имя пользователя или любую идентификацию в переменной сеанса. Наконец, при нажатии кнопки «Выход» уничтожить переменную сеанса.

  2. Другим вариантом является TempData в ASP.NET, в котором хранится значение для следующей страницы. сначала проверьте эту переменную, а затем предоставьте доступ к компоненту.

http://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc

когда страница закрыта, tempdata будет автоматически убит.

Надеюсь, это поможет. Благодаря.

...