Можете ли вы установить конкретную переменную сеанса, чтобы жить только 5 минут? - PullRequest
0 голосов
/ 12 декабря 2018

Есть ли способ относительно ASP.NET Webforms, чтобы установить время жизни для переменной сеанса равным 5 минутам?

Например, если у меня есть переменная:

Session["Name"] = "Bob";

После5 минут Я бы хотел, чтобы он был уничтожен или, по крайней мере, мог бы его аннулировать.

Пример:

Session["Name"] = null;
//But in the background and not code-controlled as it has to be live over multiple pages.

Я знаю, что срок действия этих переменных сеанса истекает по истечении времени ожидания, которое контролируется внутриIIS, но я пытаюсь истечь их до истечения времени ожидания с интервалом в 5 минут, это возможно?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Создайте два значения сеанса (или один объект, который содержит два значения, которые я, вероятно, предпочел бы, но для простоты давайте просто используем два значения для иллюстрации), одно со значением и одно со временем истечения.

Session["Name"] = "Bob";
Session["NameExpiry"] = DateTime.UtcNow.AddMinutes(5);

Затем, где бы вы ни использовали это значение, проверяйте его срок действия:

if (Session["NameExpiry"] != null && DateTime.Parse(Session["NameExpiry"]) < DateTime.UtcNow)
{
    Session["Name"] = null;
    Session["NameExpiry"] = null;
}

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

0 голосов
/ 12 декабря 2018

Поскольку сеансы хранятся на стороне сервера.создать действие, которое можно вызвать через 5 минут со стороны клиента.

public class ControllerName
{
   public ActionResult ClearSession()
   {
      Session = null;
   }
}

Затем на стороне клиента:

<script>

    setTimeout(function(){  $.ajax('/ControllerName/ClearSession'); }, 300000);

</script>

После упомянутого OP:

Проблема, с которой я столкнулся, заключается в том, что она контролируется на стороне клиента.Мне нужно, чтобы это работало в случае пользователей, которые запрещают запуск JS на страницах

Session["Name"] = "Bob";

//task that will run after the specified interval
Task.Delay(300000).ContinueWith((task) => {
    Session.Remove(Name);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...