一尘不染

Java中的会话管理是什么?

jsp

我在采访中也遇到了这个问题。我确实对Java中的Session Scope及其管理感到困惑。

在web.xml中,我们确实有条目:

<session-config>
        <session-timeout>
            30
        </session-timeout>
</session-config>

它实际上表明了什么?这是整个项目的范围吗?

令我困惑的另一点是,如何在同一项目中分隔多个请求的会话范围?就是说,如果我从一台PC登录并同时从另一台PC登录,它与众不同吗?

另外,另一个令人困惑的事情是浏览器的差异。为什么不同的Gmail可能会在不同的浏览器中打开?而且Gmail可以阻止会话从登录到注销。我们的个人网站如何维护?


阅读 434

收藏
2020-06-08

共1个答案

一尘不染

会话管理不仅限于Java和servlet。大致情况如下:

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

3.1。如果服务器不“了解”客户端,则:

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

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

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

现在来看一些问题:

  • 会话超时是每个会话映射条目的生存时间,无需访问。换句话说,如果客户端在30分钟内未发送请求(以您的示例为准),则会话映射将删除该条目,即使客户端使用会话cookie中的唯一键标识自己,也不会显示任何数据在服务器上。

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

  • 从不同的PC登录实际上是相同的-您不共享会话ID

  • 注销实际上是删除服务器上会话ID的条目。

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

2020-06-08