65.9K
CodeProject 正在变化。 阅读更多。
Home

会话状态 - 基础知识

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

3分钟阅读

viewsIcon

5794

这是一个广泛的话题,所以我尽量避免过多的细节,只给出基础知识。定义会话超时:获取并设置允许在请求之间经过的时间,

这是一个广泛的话题,所以我尽量避免过多的细节,只给出基础知识。

定义

  • 会话超时:获取并设置允许在请求之间经过的时间,以分钟为单位,超过此时间,会话状态提供程序将终止会话。
  • 表单身份验证超时(过期时间):用于指定表单身份验证会话的有限生命周期。如果颁发了持久表单身份验证 Cookie,则 timeout 属性也用于设置持久 Cookie 的生命周期。

我的经验是,应用程序的用户要求将会话超时设置为 60 分钟。我想这很简单... 我会添加一些设置会话超时的代码。

Session.Timeout = SomeConfigurableValue

错了!实际上这仍然是必要的,但并没有完全解决问题。该应用程序正在使用表单身份验证。表单身份验证也有超时时间。我想这很简单... 我会添加一些设置表单身份验证票证超时的代码。

Dim authTicket As New FormsAuthenticationTicket(1, crlLogin.UserName, DateTime.Now, DateTime.Now.AddMinutes(SomeConfigurableValue), isCookiePersistent, Nothing)

再次错了!实际上这也需要,但我仍然缺少一个关键部分。在 IIS(特别是 7.0)中,基本上有两种方法可以管理会话状态:1) 进程内 或 2) 进程外(这种方式有不同的变体)。该站点被设置为以进程内方式存储会话状态。这意味着会话状态存储在工作进程(w3wp.exe)内部。在 IIS 中有一个 空闲超时 属性... 默认设置为 20 分钟。因此,如果对该站点没有活动 20 分钟,工作进程将消失,并带走所有会话,因为该站点以进程内方式管理会话状态。在理解了这一点之后,用户有时会说会话超时不是 60 分钟,这才有道理。让我们来看一下两个场景。

#1 会话状态在 60 分钟内保持活动状态
用户 ABC 于下午 2:00 登录,执行一些操作,直到下午 2:50 才尝试执行其他操作。用户 XYZ 于下午 2:10 登录并执行一些操作。然后用户 XYZ 在下午 2:25 和 2:40 执行其他操作。当用户 ABC 尝试在下午 2:50 查看用户帐户时,他们的会话仍然有效。

#2 会话状态在 60 分钟内未保持活动状态
用户 ABC 于下午 2:00 登录,执行一些操作,直到下午 2:50 才尝试执行其他操作。用户 XYZ 于下午 2:10 登录,执行一些操作,并且直到下午 2:45 才尝试执行任何操作。当两个用户尝试执行他们的第二个操作时,他们将被要求重新登录。这是因为 IIS 重新回收了服务器上的工作进程,因为工作进程空闲了 20 分钟。

虽然有办法克服这个问题,但答案并不简单。仅仅增加空闲超时属性可能会对您的环境产生影响。还有将会话状态存储在进程外的选项,这取决于您如何决定管理它。

© . All rights reserved.