我也在面试中遇到过这个问题。我对Session Scope& amp;它在java中的管理。
在web.xml中我们有条目:
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
它实际上是什么意思?是整个项目的范围吗?
令我困惑的另一点是,我们如何在同一个项目中分离多个请求的会话范围?意味着我是否从PC和PC登录在我从另一台PC登录的同时,它有区别吗?
另外,另一个令人困惑的事情是浏览器的不同之处。为什么不同的Gmails可以在不同的浏览器中打开? Gmail可以阻止会话从登录退出。如何通过我们的个人网络维护?
答案 0 :(得分:26)
会话管理不仅限于Java和servlet。以下是它的大致情况:
服务器检查浏览器是否已使用会话cookie识别(见下文)
3.1。如果服务器“不知道”客户端:
服务器创建一个新的唯一标识符,并将其作为密钥放在Map(粗略地)中,其值为新创建的Session。它还会发送包含唯一标识符的cookie响应。
浏览器存储会话cookie(生命周期=浏览器实例的生命周期),包含唯一标识符,并将其用于每个后续请求以唯一标识自己。
3.2。如果服务器已经知道客户端 - 服务器获得与会话cookie中找到的传递的唯一标识符相对应的会话
现在提出一些问题:
会话超时是未被访问的每个会话映射条目的生存时间。换句话说,如果客户端没有发送30分钟的请求(来自您的示例),会话映射将删除此条目,即使客户端使用会话cookie中的唯一键标识自己,也不会出现任何数据在服务器上。
可以在不同的浏览器中打开不同的gmails(以及任何网站),因为会话cookie是每个浏览器。即每个浏览器通过不发送唯一会话ID或通过发送服务器为其生成的一个来唯一地标识自己。
从不同的PC进行日志记录实际上是相同的 - 您不共享会话ID
注销实际上是删除了服务器上会话ID的条目。
注意:也可以存储唯一的会话ID:
答案 1 :(得分:2)
它实际上是什么意思?
会话的生命周期。如果客户端和服务器之间没有事务处理30分钟(根据代码段)
,则会话到期是整个项目的范围吗?
它有适用范围。为每个Web应用程序定义
令我困惑的另一点是怎么可能 我们将会话范围分开 同一个项目中有多个请求? 意味着我是否从PC和PC登录 在我登录的同时 另一台PC,它有区别吗?
是。会话ID(Apache Tomcat的JSESSIONID)将有所不同。
另外,另一个令人困惑的事情是 浏览器差异。为什么呢 可以打开不同的Gmails 不同的浏览器?
来自不同浏览器的同一用户的每次登录都是完全不同的会话。在一个浏览器中设置的cookie不会影响另一个浏览器。因此,在不同的浏览器中可以使用不同的Gmail实例。
Gmail可以阻止会话 登录退出。它是如何维护的 用我们的个人网络?
答案 2 :(得分:0)
Java中的Servlet有一个HttpSession对象,可用于存储用户的状态信息。会话由客户端通过cookie(JSESSIONID)管理,或者可以使用URL重写来完成。会话超时描述服务器在删除存储在HttpSession中的状态信息之前在最后一个请求之后等待的时间。
范围是每个浏览器实例,因此在示例中,您从两个不同的PC登录将导致两个会话对象。
答案 3 :(得分:0)
如果你在不同的窗口中打开相同的应用程序,我的意思是多个浏览器实例,它将为每个实例创建不同的会话。
答案 4 :(得分:0)
我建议Apache Shiro进行会话管理,身份验证和授权。
我把它拿回来。
正如@BalusC所述,只有servlet容器负责管理http会话。 Shiro正在使用它。它将通过您明确定义的过滤器挂钩到HttpSession。
答案 5 :(得分:0)
我们有4种方法来管理会话。
1.Cookies 2.URL重写 3.隐藏的表格字段 4.HTTP会议
第四个是强大的,现在大部分时间都在使用。