有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从管理面板终止所有用户的会话

我正在使用scala 2.2play-framework 2.2

我不知道这是否可能,但我必须强制所有用户退出该网站。我知道这对我没有帮助

Redirect("/").withNewSession

共 (1) 个答案

  1. # 1 楼答案

    一次性注销所有用户确实是可能的。方法是获取用于跟踪用户的信息,并在服务器上使其无效。使用传统的会话管理方法,包括发布tokens,这非常简单。然而,基于this comment,听起来你并不是在服务器端发行代币,在这种情况下,你需要考虑一些不同的东西

    使用令牌进行会话管理

    会话管理的传统方法是在成功进行身份验证时从服务器发出令牌。假设您将用户存储在数据库表中。在他们登录之前,他们没有令牌:

    user   | token          | ...
                  -
    govind |                | ...
    

    一旦用户成功登录,服务器将生成一个令牌(也称为会话ID),并将其放入该用户的记录中:

    user   | token          | ...
                  -
    govind | jCwEna9FUCex   | ...
    

    服务器还将此令牌放入用户的cookie中,因此它现在看起来像:

    Cookie: sessionId=jCwEna9FUCex;
    

    然后使用该令牌跟踪用户。每次有人向网站发送请求时,服务器上的一层代码都会执行以下检查:

    if a cookie is present in the request, and it had a session ID that we recognise
      allow request
    else
      block request
    

    当用户注销时,在登录时执行的操作将被反转。令牌列在数据库中的记录中被清除:

    user   | token          | ...
                  -
    govind |                | ...
    

    然后从他们的cookie中删除令牌:

    Cookie:
    

    现在让我们回到注销所有用户。这可以通过清除数据库表中所有用户的token列来实现。这是一个可以通过HTTP POST请求从网站管理员部分的屏幕上执行的操作。清除该列将导致上述伪代码块中提到的if条件对所有用户都失败

    不带令牌的会话管理

    代币的好处在于,它们可以在没有任何其他副作用的情况下被清除。cookie中存储的内容的问题是,使这些值(用户ID和用户名)无效会产生非常严重的副作用。我给你的建议是转向基于令牌的方法。最重要的是,您的方法不是很安全,因为您的cookie可能是replayed

    If I'm a user of your site, I can make a copy of my cookie after I log in for the first time. Even if I log out of your website, as long as I put my cookie back in place I'll actually never need to use my password to get back into the site.

    如果出于某种原因,您无法将会话管理方法更改为基于令牌的,那么您可以向站点介绍其他东西,以模拟令牌给您带来的可能性。然而,这些都是黑客,所以我不打算提出它们!再一次,我会使用代币