TinTinTiTin Ответов: 2

Как тайм-аут сеанса за 5 минут в ASP.NET


В Asp.net тайм-аут сеанса основан на скользящем истечении срока действия
Это означает, что если я установлю sessionTimout на 5 минут и сеанс доступа пользователя
через 3 минуты сеанс снова возобновится до 5 минут. Каждый раз сеанс
считается, что он сбрасывает время.

Как избежать вышеописанной ситуации и убить сеанс прямо через 5 минут?
о том, сколько раз к нему обращаются в промежутке.

Что я уже пробовал:

Я попытался установить таймер после входа в систему на странице входа и OnTimeElaspsed
событие я пытался убить сеанс но сеанс не доступен в этом событии
поскольку жизненный цикл страницы к этому времени заканчивается.

System.Timers.Timer aTimer = new System.Timers.Timer(10000) { AutoReset = false };
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
	HttpContext.Current.Session.Abandon();
}

2 Ответов

Рейтинг:
16

F-ES Sitecore

Добавьте эти события в свой глобальный файл. asax

void Session_Start(object sender, EventArgs e)
{
    Session["SessionExpiry"] = DateTime.Now.AddMinutes(5);
}

void Application_AcquireRequestState(object sender, EventArgs e)
{
    try
    {
        DateTime expiry = (DateTime)base.Context.Session["SessionExpiry"];

        if (expiry <= DateTime.Now)
        {
            Session.Abandon();

            // the abandoned session won't kick in until the next page request.
            // here I am redirecting back to the current page, but you may want to do something else
            // like redirect to a "Session Expired" page.
            Response.Redirect(Request.RawUrl);
            base.Context.ApplicationInstance.CompleteRequest();
        }
    }
    catch
    {
    }
}


Рейтинг:
0

Graeme_Grant

В Google Search есть много отличных ответов для вас: настройка asp.net тайм-аут сеанса-поиск в Google[^]

Как этот: Тайм-аут сеанса в ASP.NET -переполнение стека[^]


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

Таймер-это не решение.

Что, если бы у вас был успешный сайт с тысячами активных пользователей? (например: CodeProject имеет более 30 000 активных пользователей на момент написания этой статьи). Первое, что приходит на ум, - это то, что у вас очень быстро закончится память.

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

Тогда вы можете:
1. при обратной проверке проверьте наличие значения;
2. периодически со страницы выполняйте Ajax-проверку значения.

Если значение пропало,то сеанс истек. Теперь вы можете сообщить пользователю, что его сеанс закончен.

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


TinTinTiTin

Привет, Грэм Грант, ты не понял моего вопроса. Я не хочу скользить тайм-аут сеанса.
Ссылка предоставляется просто показать, чтобы установить тайм-аут (по умолчанию скользящий).

Graeme_Grant

Пожалуйста, убедитесь, что пересмотренный ответ-это то, что вы ищете. Если нет, Пожалуйста, нажмите на кнопку Улучшить вопрос чтобы добавить больше информации к этому вопросу.