JSESSIONID存储在哪里?

时间:2014-09-12 04:15:44

标签: java session jsessionid

我正在研究特定Web应用程序的工作方式,并且我想确定JSESSIONID会话令牌中存储的确切信息。

我理解PHPSESSSID令牌例如存储[取决于服务器]在/ tmp /,/ var / lib / php / session或/ var / lib / php5 / session之类的位置。

我的问题是 - JSESSIONID是否以类似的方式存储?是否有特定的配置文件要检查以找到它们存储位置的位置?是否有另一种方法可以在不通过整个代码库的情况下准确查找会话令牌中的内容?例如,使用PHP,我可以简单地检查会话令牌文件,并查看正在存储的主要组件(可能是用户名,授权标志等)。

谢谢。

4 个答案:

答案 0 :(得分:1)

要开始,JSESSIONID存储在cookie中。如果cookie被关闭,你必须进入url重写以将jsessionid存储在url中。 cookie中的会话没有其他内容。在发生以下任何一种情况之前,会话中没有任何内容存储:

  1. 容器中的身份验证
  2. request.getSession()或request.getSession(true)被称为
  3. 一旦发生这种情况,您可以在会话中存储信息。调用request.getSession()时,它返回HttpSession。 HttpSession实现了可序列化。一旦此对象存在,请求结束时,此对象将被序列化。每个容器都提供了有关如何存储HttpSession序列化对象的不同方法。默认情况下,大多数服务器在内存中执大多数容器都会为您提供多种选择,以选择如何序列化HttpSession对象(内存,磁盘,数据库)。大多数容器还将为您提供一种自定义方法,并创建我们自己的序列化HttpSession的方法。

    默认情况下,Servlet规范并没有真正为您提供查看会话并获取会话ID列表或与之关联的数据的方法。这是一个巨大的安全风险。

    如果你想获得会话ID列表和相关信息,你可以看一下,将要编写代码。有很多方法可以做到这一点。一些例子是:

    1. 实现javax.servlet.http.HttpSessionListener并将jsessionid存储到数据库
    2. 实现javax.servlet.http.HttpSessionAttributeListener并使用会话ID
    3. 将键/值对存储在数据库中

      实施上述任何接口时,除非将信息存储在会话中,否则您将无法从身份验证中检索用户名。您可以将两个侦听器添加到任何Web应用程序,而不会影响原始的war / ear文件行为。

      默认情况下,应用服务器很难获得您正在寻找的信息,但只需稍加编码,您就可以规避它。

答案 1 :(得分:0)

Tomcat仅在关闭时将会话数据存储在hd上,并且仅当sessiondata是可序列化的时才会存储,并且只有在配置了会话才能在重新启动后才能存储。 所以没有temp / var文件夹可以查看世界上几乎所有的tomcat。

答案 2 :(得分:-2)

每个应用程序服务器都会定义自己存储此数据的方式(通常允许您将其更改为其他内容),但通常无法直接访问它。

如果要查看会话中设置的值,可以使用HttpSessionAttributeListener个对象在代码为会话设置某个值或将其删除时接收事件。

答案 3 :(得分:-2)

每个应用程序在应用程序服务器上都有on session和sessionId。 java中会话的管理取决于如何管理它。通常会话存储在cookie中。 HttpSessionAttributeListener您可以使用该类的对象来接收事件。

我们可以用名称session或任何你想要的东西开发一个bean,并实现HttpSession接口来获取模式方法。

该bean将包含您要在会话中存储的所有信息。