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

在ASP.Net中为不同的会话变量设置不同的超时,asp.net,session-state,session-timeout,session-cookies,Asp.net,Session State,Session Timeout,Session Cookies,是否可以为ASP.Net中的不同会话设置不同的超时 已编辑 我的意思是,在同一页中,我有两个会话变量session[“ss1”]和session[“ss2”],是否可以为每个会话设置超时?或者,是否也有类似的操作,比如将会话保存到cookie并设置expire? Sry我只是ASP.Net的新手如果您谈论的是不同用户的会话超时,那么 您可以使用Global.asax在该事件中,您可以使用Session\u Start事件,在该事件中,您可以为不同的用户设置不同的会话超时在登录时设置任何超时,您可

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

已编辑 我的意思是,在同一页中,我有两个会话变量session[“ss1”]和session[“ss2”],是否可以为每个会话设置超时?或者,是否也有类似的操作,比如将会话保存到cookie并设置expire?
Sry我只是ASP.Net的新手

如果您谈论的是不同用户的会话超时,那么
您可以使用
Global.asax
在该事件中,您可以使用
Session\u Start
事件,在该事件中,您可以为不同的用户设置不同的会话超时

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

HttpContext.Current.Session.Timeout = 540;

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

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

解决方法之一是使用缓存,并确保在使用的每个密钥中都包含用户的会话id。这样,您将得到一个模拟会话本身的缓存存储

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


2.0版提供了许多现成的存储类型选项,包括会话绑定缓存。

我编写了一个非常简单的扩展程序类来实现这一点。您可以找到源代码

用法:

//store and expire after 5 minutes
Session.AddWithTimeout("key", "value", TimeSpan.FromMinutes(5));
//
///此类将某些内容保存到会话对象
///但是有一个过期超时
///(就像ASP.NET缓存一样)
///(c)2011年。麻省理工学院执照
///使用示例:
///Session.AddWithTimeout(
///“钥匙”,
///“价值”,
///时间跨度从分钟(5)开始;
/// 
公共静态类SessionXtender
{
公共静态void AddWithTimeout(
此HttpSessionState会话,
字符串名,
对象值,
时间跨度(过期后)
{
会话[名称]=值;
session[name+“ExpDate”]=DateTime.Now.Add(expireAfter);
}
公共静态对象GetWithTimeout(
此HttpSessionState会话,
字符串名称)
{
对象值=会话[名称];
if(value==null)返回null;
DateTime?expDate=会话[名称+“expDate”]作为日期时间?;
if(expDate==null)返回null;
if(expDate

亚历克斯。CEO、创始人

需要更多信息来理解您的问题您的意思是什么
不同
?您是否检查:?在当前的.Net Framework版本中不可能,但Microsoft应该在下一个版本中考虑这一点:)KamalaPrakash it我以这种方式设置会话超时。它不再在web.config中显示了吗?
/// <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");