Создайте два значения сеанса (или один объект, который содержит два значения, которые я, вероятно, предпочел бы, но для простоты давайте просто используем два значения для иллюстрации), одно со значением и одно со временем истечения.
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;
}
Вы можете добавить различные проверки ошибок, другую логику значений и т. Д. Но принципал тот же,По сути, не думайте об этом, как о попытке установить какой-либо фоновый таймер для активного истечения срока действия данных сеанса, подумайте о сохранении времени истечения как части данных сеанса и его молчаливом истечении в следующий раз, когда вы будете использовать его после этой отметки времени..