Как предотвратить сеанс, чтобы сохранить жизнь - PullRequest
0 голосов
/ 12 октября 2018

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

Проблема, с которой я столкнулся, заключается в том, что вошедшие в систему пользователи никогда не истекают из-за окончания сеанса, поскольку существует постоянное соединение с сервером из-за фонового опроса.Есть ли способ предотвратить сброс таймера сеанса для соединений по определенным адресам?

1 Ответ

0 голосов
/ 12 октября 2018

Как только запрос получен на сервер, сеанс будет обновлен, и сеанс никогда не истечет, как вы указали.Вы можете сделать обходной путь, как показано ниже.Скопируйте код в Global.asax.

void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        DateTime? userLastActive = (DateTime?)HttpContext.Current.Session["UserLastActive"];
        if (userLastActive.HasValue && DateTime.Now.Subtract(userLastActive.Value).Minutes > 15)
        {
            Session.Abandon();
            return;
        }

        // Check if the request for background tasks
        var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
        var action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();
        if (controller == "BackGroundTaskController" &&
            action == "BackGroundTaskAction")
        {
            // ignore
            return;
        }

        HttpContext.Current.Session["UserLastActive"] = DateTime.Now;
    }
}

При каждом запросе будет выполняться приведенный ниже код.Вы можете установить переменную "UserLastActive" для объекта сеанса, за исключением периодических запросов.Затем вы можете проверить последнее активное время пользователя и завершить сеанс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...