MVC2和会话开始事件

时间:2010-07-27 13:17:23

标签: asp.net asp.net-mvc session

设置:

帐户控制器,其中包含从模板中提取的典型登录/注销内容。登录页面上没有太多修改。使用自定义成员资格提供程序(SQL),但我认为这不会影响我在这里尝试做的事情。

要求:

客户希望通过限制并发用户而不是总用户来处理许可。因此,在引用此post here之后,我开始着手为我需要做的工作。这是为了跟踪已注册我们的应用程序的每个组织的最大和当前用户。没问题,只需要一个应用程序(“max”)和应用程序(“current”),它们都是哈希表,密钥是组织ID,值是组织的当前或最大用户。在Session_Start上,我会增加当前用户,检查它是否超过max并且a)重定向到错误页面或b)让他们继续他们需要做的事情。在Session_End上,我会减少计数。

问题:

使用formsService.signIn时,会话中实际存储了什么?我似乎无法在session_start中收集有关会话的任何信息,除了会话ID。因此,我无法为用户跟踪增加正确的数字。我无法向会话添加变量,因为在获得机会之前,session_start已经被解雇了。

1 个答案:

答案 0 :(得分:1)

会话以某种方式与身份验证相关联的概念是一个神话。它们完全相互独立。如果多个用户碰巧共享会话密钥,甚至可以在多个用户之间共享会话;这就是为什么你从来没有把安全敏感信息放在会话中。您登录时会话也会过期。同样,除非您明确放弃,否则您的会话在注销后仍处于活动状态。

Session更像是用户特定的缓存。

所以你需要接受这个事实并适应它。查看当前用户是否在会话启动期间进行了身份验证。您还需要在登录期间增加,因为会话已经开始。等等。