在ASP.Net中为不同的会话变量设置不同的超时

时间:2011-05-20 08:48:00

标签: asp.net session-state session-timeout session-cookies

这是否可以为ASP.Net中的不同会话设置不同的超时?

被修改 我的意思是在同一页面中我有2个会话变量Session [“ss1”]和Session [“ss2”],是否有可能为每个会话设置超时?或者无论如何都要像保存会话到cookie并设置过期一样? 我非常熟悉ASP.Net

5 个答案:

答案 0 :(得分:6)

我写了一个非常简单的扩展类来做到这一点。您可以找到源代码here

用法:

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

答案 1 :(得分:3)

在登录时设置任何超时,您可以为不同的用户设置不同的超时...

HttpContext.Current.Session.Timeout = 540;

答案 2 :(得分:0)

如果您正在讨论不同用户的会话超时 您可以在此使用Global.asax,您可以使用Session_Start事件,在这种情况下,您可以为不同的用户设置不同的会话超时

答案 3 :(得分:0)

答案是没有会话超时适用于每个用户的所有会话变量。但是,您可以使用缓存或cookie,它们都支持单个(每个密钥)级别的超时。

但坚持这些解决方案并非没有一些重大缺点。如果使用缓存,则会丢失会话提供的隐私,如果使用cookie,则会受到文件大小和序列化问题的限制。

一种解决方法是使用缓存并确保在您使用的每个密钥中包含用户的会话ID。这样,您最终会得到一个模仿会话本身的缓存存储。

如果您想要进一步的功能并且不想为实现这个而烦恼,那么您可以使用CodePlex上这个小项目中的API:

http://www.univar.codeplex.com

版本2.0提供了许多开箱即用的存储类型选项,包括会话绑定缓存。

答案 4 :(得分:0)

/// <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");
亚历克斯。 CEO,创始人https://www.jitbit.com/alexblog/196-aspnet-session-caching-expiring-values/