终止用户的会话并通过界面菜单注销



您可以就如何杀死某人的会话并从我的MVC应用程序注销。我目前的计划是:

  1. 在应用程序开始加载sessionscache
  2. 当用户登录时 - 将其会话保存在tblsessions中,然后部分重新加载缓存(在其中添加会话而无需添加会话(
  3. (
  4. 每30秒AJAX将验证我是否有会话
  5. 管理员将拥有一个接口工具,其中包含缓存中的所有活动会话,当他杀死一个会话时,他将其从缓存和DB中删除
  6. 在下一个ajax呼叫用户将不会有会话,并且将被注销
  7. 如果用户正常登录缓存中的会话和数据库中的会话将被删除
  8. 每30分钟将完成缓存的完整重新加载

请考虑我的应用程序具有OnActionExeCuting((Overriden函数,该功能检查用户是否有会话,如果不登录他。但这仅在执行操作执行中发生,如果用户不单击任何地方(AFK(,他不会将其重定向到主页。(考虑到Ajax调用检查会话是多余的?(

也要在不使用注销按钮的情况下关闭浏览器/选项卡时清除用户会话,但是我不确定这是如何发生

您提出的解决方案有一些问题,这使其无法正常工作:

  1. 会议和auth均采用客户端cookie来管理其状态。服务器只能使身份验证/会话无效。它实际上不能直接"注销"用户,因为该件不在直接服务器控制下。换句话说,您可以设置某些说明特定用户应登录的内容,但是该用户实际上不会登录,直到他们尝试提出另一个请求,并且由当时会影响用户的状态更改的服务器。

  2. 会议采用滑动超时。这意味着任何请求客户提出的请求将重置其会话的超时。换句话说,如果您每30秒长时间播放会话状态,则用户将有效地有一个永远不会到期的会话。

  3. 会议有意匿名。出于安全原因,客户端唯一指向会话的链接是带有会话ID的cookie。通过使cookie成为成功攻击中的必备部分,这可以防止一定水平的会话劫持。然后,使用Secure令牌之类的东西,当然,当然在您的网站上使用SSL,您可以有效地防止该cookie在分配给客户端以外的任何其他情况下可用。漫长而简短的是,实际上没有任何方法可以弄清哪个会话属于与该用户直接联系以外的给定用户。

  4. 缓存本质上是挥发性的。您可以说特定的键应该在一定时期内拥有一生,但这只是一个建议。有许多不同的因素可能导致缓存的物品被破坏,最完全在您控制之外。

鉴于所有这些,您必须从不同的方向来实现这一目标。我的建议是有一个单独的表格,您可以在其中跟踪登录/会话。这基本上将是一种日志。当用户登录或创建新的会话时,您将在此数据库中添加记录。如果用户的验证或会话过期,则将更新适当的记录。如果用户故意注销,则将删除记录或以其他方式将其标记为无活动。就您的管理员而言,然后他们将管理此表,将记录删除或标记为不活动。

然后,您将不得不围绕网站操作添加一些逻辑才能说明此表。您可以创建一个操作过滤器,以检查该表并执行任何必要的操作。例如,如果用户已被管理员"签署",则操作过滤器将从该表中读取适当的记录,请参见用户已签署,然后通过将用户实际签名出去来影响该更改。<<<<<<<<<<<<

由于长时间播放会导致会话永不过期,因此您基本上需要管理自己的超时。例如,您可以在"日志"表中记录会话的时间,然后将该时间与每个后续请求(包括AJAX(上的当前时间进行比较。同样,您可以为此目的使用操作过滤器。如果会话根据您的超时"过期",则可以手动破坏用户的会话。

您还需要以这种方式添加或说明很多其他内容,但希望这为您提供一个很好的框架。

最新更新