什么是Java中的会话管理?

14 java session jsp servlets session-management

我也在面试中遇到过这个问题.我对Session Scope及其在java中的管理有很多困惑.

在web.xml中我们有条目:

<session-config>
        <session-timeout>
            30
        </session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

它实际上是什么意思?是整个项目的范围吗?

令我困惑的另一点是,我们如何在同一个项目中分离多个请求的会话范围?意味着如果我从PC登录并同时从另一台PC登录,它会区分它吗?

另外,另一个令人困惑的事情是浏览器的差异.为什么不同的Gmails可以在不同的浏览器中打开?Gmail可以阻止会话从登录退出.如何通过我们的个人网络维护?

Boz*_*zho 26

会话管理不仅限于Java和servlet.以下是它的大致情况:

  1. HTTP协议是无状态的,因此服务器和浏览器应该有一种通过多个请求存储用户身份的方法
  2. 浏览器将第一个请求发送到服务器
  3. 服务器检查浏览器是否已使用会话cookie进行识别(参见下文)

    3.1.如果服务器不"知道"客户端:

    • 服务器创建一个新的唯一标识符,并将其作为一个键(大致)放在一个键中,其值是新创建的Session.它还发送包含唯一标识符的cookie响应.

    • 浏览器存储会话cookie(生命周期=浏览器实例的生命周期),包含唯一标识符,并将其用于每个后续请求以唯一标识自身.

    3.2.如果服务器已经知道客户端 - 服务器获得与会话cookie中找到的传递的唯一标识符相对应的会话

现在谈谈你的一些问题:

  • 会话超时是未被访问的每个会话映射条目的生存时间.换句话说,如果客户端不发送30分钟的要求(从你的例子),会话地图将放弃这一条目,即使客户端识别本身在会话cookie中的唯一关键,没有数据将出席在服务器上.

  • 可以在不同的浏览器中打开不同的gmails(以及任何站点),因为会话cookie是每个浏览器.即每个浏览器通过不发送唯一会话ID或通过发送服务器为其生成的一个来唯一地标识自己.

  • 从不同的PC进行日志记录实际上是相同的 - 您不共享会话ID

  • log-out实际上是删除服务器上会话ID的条目.

注意:也可以存储唯一的会话ID: