【问题标题】:MVC2 and Session Start EventMVC2 和会话开始事件
【发布时间】:2010-07-27 21:39:08
【问题描述】:

设置:

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

要求:

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

问题:

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

【问题讨论】:

  • IMO,几乎不可能找到一个网站的并发用户。加载页面后,网络服务器不会有任何迹象表明用户仍在网站上。
  • 你知道,我也有这种心态,并提出了很好的反对意见(不能确定正确的计数,即使他们有帐户也阻止人们工作等)但是在一天结束时,我不支付自己的发票:/

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


【解决方案1】:

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

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

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

【讨论】:

  • 是的,只是想通了。我已经开始在数据库中保留一个“临时”表,该表跟踪每个组织的当前和最大值,并将增量/减量与存储库中的登录/注销操作联系起来。可以直接从这些操作中进行检查,而不必担心会话的所有有趣含义。我只是一直认为,当您登录时,您有一个会话说明您是谁。如果我不是每天都学到一些东西,我就不会做我的工作!谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2015-06-28
  • 2013-02-12
相关资源
最近更新 更多