ASP会话状态概述

时间:2014-07-03 07:48:49

标签: asp.net session-state

我在一个使用ASP会话状态来保存状态信息的经典ASP网站上工作。我们使用sql数据库实现ASP会话状态。

我们遇到的问题是会话被锁定,然后对该会话的后续请求会堆积成影响我们性能的大队列。我不希望你能为我解决这个问题,但也许有人可以给我一个会话状态的概述,因为我认为我并不完全理解它。

  • 我们的所有页面都没有标记为只读,因此我们对会话数据库的所有请求都是独占的(TempGetStateItemExclusive3);这反过来锁定会话。
  • 我理解如果对会话进行了修改,我们更新了数据库中的会话(TempUpdateStateItemShort),并且该进程的一部分删除了锁。
  • 我也明白,如果我们放弃一个锁定被(TempRemoveStateItem)删除的会话。
  • 我也明白,定期发生sql代理作业以删除过期的会话。

我不明白的是我们如何放弃会话或如何释放我们通过Get但不更新锁定的会话的锁定?

我已经阅读了以下内容,以便在理解http://msdn.microsoft.com/en-gb/library/aa478952.aspxhttp://msdn.microsoft.com/en-us/library/aa479041.aspx

时理解这一点

一如既往,我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我花了一些时间研究这个问题,我认为我已经弄明白了。

  • 放弃会话是一项明确的行动,Session.Abandon()

  • 释放锁是一项隐含行动

在page_load事件中,调用TempGetStateExclusive3以获取会话对象。退出page_load隐式调用TempReleasStateItemExclusive。作为开发人员,您只能控制放弃会话,框架会为您处理锁定。

这并不能解决会话被锁定的问题。但至少现在我知道sql server会话状态应该如何工作。

由于