【问题标题】:Where is JSESSIONID stored? [duplicate]JSESSIONID 存储在哪里? [复制]
【发布时间】:2014-11-06 04:20:31
【问题描述】:

我正在研究一个特定的 Web 应用程序是如何工作的,并且我想确切地确定 JSESSIONID 会话令牌中存储了哪些信息。

我了解 PHPSESSSID 令牌例如存储在 [取决于服务器] 在 /tmp/、/var/lib/php/session 或 /var/lib/php5/session 等位置。

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

谢谢。

【问题讨论】:

  • 碧山:我在发布问题之前已经查看了该帖子。如果您花时间阅读它,您会发现它没有关于会话存储位置的信息。

标签: java session jsessionid


【解决方案1】:

每一个应用服务器都会定义它自己的方式来存储这些数据(并且您通常可以将其更改为其他方式),但您通常无法直接访问它。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 会话不存储在 Cookie 中。只有会话 ID 存储在 cookie 中。
    【解决方案3】:

    Tomcat 确实仅在关闭时将会话数据存储在 hd 上,并且仅当会话数据可序列化并且仅当您已配置会话以在重新启动后仍然存在时。 所以世界上几乎所有的 tomcat 都没有 temp/var 文件夹可供查看。

    【讨论】:

    • 不真实。如果您使用 PersistentManager,它会在会话被钝化时存储会话。如果您使用 DeltaManager,它会在整个集群中复制它们。如果您使用 BackupManager,它会将它们备份到指定的备份节点。
    • @EJP 完全正确。 如果配置存储、存储节点或存储网络,数据将被写入。
    【解决方案4】:

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

    1. 容器中的身份验证
    2. request.getSession() 或 request.getSession(true) 被调用

    一旦发生这种情况,您就可以在会话中存储信息。调用 request.getSession() 时,返回 HttpSession。 HttpSession 实现可序列化。一旦这个对象存在,当请求结束时,这个对象就会被序列化。每个容器都提供了不同的方式来存储 HttpSession 序列化对象。默认情况下,大多数服务器在内存中执行此操作。大多数容器会给你多种选择来选择如何序列化 HttpSession 对象(内存、磁盘、数据库)。大多数容器还将为您提供一种自定义和创建我们自己的方式来序列化 HttpSession 的方法。

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

    如果您想获取会话 ID 列表和相关信息以便您查看,您将不得不编写代码。有多种方法可以做到这一点。一些例子是:

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

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

    默认情况下,应用服务器很难获取您要查找的信息,但只需稍加编码,您就可以绕过它。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 2015-11-03
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多