【问题标题】:How to safely count sessions: is Session_Start/End in Global.Asax secure/safe enough?如何安全地计算会话数:Global.Asax 中的 Session_Start/End 是否足够安全?
【发布时间】:2009-04-20 18:23:39
【问题描述】:

我想知道给定时间的并发会话数。但是对于蜘蛛和负载平衡器以及可能不知道的影响,在全局 asax 中执行此操作有多安全:

void Session_Start(object sender, EventArgs e)
{
  counter++;
}

void Session_End(object sender, EventArgs e)
{
  counter--;
}

有什么建议吗?

【问题讨论】:

    标签: c# session


    【解决方案1】:

    至少,该解决方案存在线程问题(除了您提到的可能影响您的其他问题,我不会介绍):

    应该使用Interlocked.IncrementInterlocked.Decrement 方法而不是++-- 以原子方式完成递增和递减任务。

    【讨论】:

      【解决方案2】:

      如果您将会话保存在数据库服务器或状态服务器中,则不会触发 Session_End 事件。否则,我认为应该没有问题。

      此外,在递增/递减计数器时,您必须像这样获得对对象的锁定 -

      lock(<some shared object>)
      {
          counter++;
      }
      

      您也可以尝试查看this

      【讨论】:

      • 锁定global.asax 应用程序对象?这是 ASP.NET 应用程序中的绝对禁忌!
      猜你喜欢
      • 2013-09-20
      • 2013-02-03
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2013-03-02
      相关资源
      最近更新 更多