Как избежать сброса тайм-аута файла cookie для конкретного запроса - PullRequest
0 голосов
/ 10 мая 2018

У меня есть приложение, которое использует Asp.net Identity с скользящим истечением истины.Когда пользователь войдет в систему, я получу время истечения срока действия файла cookie с сервера, используя WEB API, и установлю время ожидания сеанса в переменной JavaScript. Запустился таймер java-скрипта.Если пользователь постоянно выполняет операции, всплывающее окно не будет отображаться.Если пользователь находится в режиме ожидания, перед показом всплывающего окна истечения сеанса я снова отправлю запрос на сервер и получу тайм-аут истечения срока действия cookie (иногда пользователи могут использовать систему без обновления, выполняя только запросы ajax). Я проверю при входе в системутайм-аут с текущим тайм-аутом, основанным на том, что я покажу всплывающее окно истечения срока действия.

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

    [HttpGet]      
    public int GetCookieExpireTime()
    {
        var identity = User.Identity as ClaimsIdentity;
        var claimType = "myExpireUtc";  
        if (identity != null && identity.HasClaim(c => c.Type == claimType))
        {
            var expireOn = identity.FindFirstValue(claimType);

            DateTimeOffset currentUtc = DateTimeOffset.UtcNow;
            DateTimeOffset? expireUtc = new DateTimeOffset(long.Parse(expireOn), TimeSpan.Zero);

            var remaining = (expireUtc.Value - currentUtc).TotalSeconds;

            return Convert.ToInt32(remaining);
        }
        return 0;
    }


function ShowPendingTimeoutDialog() {
$.ajax({
    type: "GET",
    url: loc + '/Home/GetCookieExpireTime',
    success: function (timeout) {
        var warnSec = msecWarning / 1000;
        //reset session timer if warn sec less than total time out time
        if (warnSec < timeout) {
            getCookieExpireTime();
        }
            //otherwise show session popup
        else {
            diag.dialog({
                autoOpen: false,
                title: "Session About to Expire",
                closeText: "hide",
                resizable: false,
                draggable: false,
                modal: true,
                buttons: {
                    Continue: function () {
                        ResetTimeout();
                    }
                },
                create: function () {
                    $(this).closest('div.ui-dialog')
                           .find('.ui-dialog-titlebar-close')
                           .click(function (e) {
                               ResetTimeout();
                           });
                    $(this).closest(".ui-dialog")
                .find(".ui-dialog-titlebar-close")
                .html("<span class='ui-button-icon-primary ui-icon ui-icon-closethick'></span>");
                }
            });
            UpdateTimeoutMessage();
            diag.dialog("open");
        }

    },
    failure: function () {

    }
});

function ResetTimeout() {
diag.dialog("close");
$.ajax({
    type: "GET",
    url: loc + '/KeepSessionAlive.ashx',
    success: function () {
        getCookieExpireTime();
    },
    failure: function () {

    }
});
...