【问题标题】:Set different timeout for different session variables in ASP.Net在 ASP.Net 中为不同的会话变量设置不同的超时时间
【发布时间】:2011-08-29 11:54:28
【问题描述】:

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

已编辑 我的意思是在同一页面中我有 2 个会话变量 Session["ss1"] 和 Session["ss2"],是否可以为每个会话设置超时?或者有没有做同样的事情,比如将会话保存到 cookie 并设置过期? 对不起,我刚接触 ASP.Net

【问题讨论】:

  • 需要更多信息才能理解您的问题
  • different是什么意思?
  • 您检查了吗:forums.asp.net/t/1563991.aspx/1
  • 在当前的 .Net Framework 版本中是不可能的,但微软应该在下一个版本中考虑这一点:)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    HttpContext.Current.Session.Timeout = 540;
    

    【讨论】:

    • KamalaPrakash 它我以这种方式设置会话超时。它不会再出现在 web.config 中了吗?
    【解决方案3】:

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

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

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

    如果您想要更多功能并且不想费心实现此功能,但是您可以使用 CodePlex 上这个小项目中的 API:

    http://www.univar.codeplex.com

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

    【讨论】:

      【解决方案4】:

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

      用法:

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

      【讨论】:

        【解决方案5】:
        /// <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/

        【讨论】:

          猜你喜欢
          • 2014-08-27
          • 1970-01-01
          • 2011-09-16
          • 1970-01-01
          • 2014-10-12
          • 2021-09-16
          • 1970-01-01
          • 2020-06-21
          相关资源
          最近更新 更多