Установите другое время ожидания для разных переменных сеанса в ASP.Net - PullRequest
5 голосов
/ 20 мая 2011

Можно ли установить другое время ожидания для другого сеанса в ASP.Net?

Отредактировано Я имею в виду, что на той же странице у меня есть 2 переменные сеанса Session ["ss1"] и Session ["ss2"], можно ли установить таймаут для каждого сеанса? Или есть в любом случае сделать то же самое, как сохранить сеанс в cookie и установить срок действия? Сри, я просто новичок в ASP.Net

Ответы [ 5 ]

6 голосов
/ 16 декабря 2013

Я написал очень простой класс-расширитель, который делает это. Вы можете найти исходный код здесь

Использование:

//store and expire after 5 minutes
Session.AddWithTimeout("key", "value", TimeSpan.FromMinutes(5));
3 голосов
/ 20 мая 2011

Установите любой тайм-аут во время входа в систему, вы можете установить разные тайм-ауты для разных пользователей ...

HttpContext.Current.Session.Timeout = 540;
0 голосов
/ 22 февраля 2017
/// <summary>
/// this class saves something to the Session object
/// but with an EXPIRATION TIMEOUT
/// (just like the ASP.NET Cache)
/// (c) Jitbit 2011. MIT license
/// usage sample:
///  Session.AddWithTimeout(
///   "key",
///   "value",
///   TimeSpan.FromMinutes(5));
/// </summary>
public static class SessionExtender
{
  public static void AddWithTimeout(
    this HttpSessionState session,
    string name,
    object value,
    TimeSpan expireAfter)
  {
    session[name] = value;
    session[name + "ExpDate"] = DateTime.Now.Add(expireAfter);
  }

  public static object GetWithTimeout(
    this HttpSessionState session,
    string name)
  {
    object value = session[name];
    if (value == null) return null;

    DateTime? expDate = session[name + "ExpDate"] as DateTime?;
    if (expDate == null) return null;

    if (expDate < DateTime.Now)
    {
      session.Remove(name);
      session.Remove(name + "ExpDate");
      return null;
    }

    return value;
  }
}
Usage:

//store and expire after 5 minutes
Session.AddWithTimeout("key", "value", TimeSpan.FromMinutes(5));

//get the stored value
Session.GetWithTimeout("key");

от Alex. Генеральный директор, основатель https://www.jitbit.com/alexblog/196-aspnet-session-caching-expiring-values/

0 голосов
/ 29 июня 2011

Ответ: время ожидания сеанса не применяется ко ВСЕМ переменным сеанса на пользователя.Однако вы можете использовать кеш или cookie, которые поддерживают тайм-аут на уровне отдельных пользователей (на ключ).

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

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

Если вам нужна дополнительная функциональность и вы не хотите беспокоиться о ее реализации, вы можете использовать API из этого небольшого проекта на CodePlex.:

http://www.univar.codeplex.com

Версия 2.0 предлагает множество опций типа хранилища, включая кэш с привязкой к сеансу.

0 голосов
/ 20 мая 2011

Если вы говорите о времени ожидания сеанса для разных пользователей, то Вы можете использовать Global.asax, в этом вы можете использовать Session_Start событие, и в этом случае вы можете установить время ожидания сеанса по-разному для разных пользователей

...