有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSESSIONID存储在哪里?

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

例如,我知道phpsessid令牌(取决于服务器)存储在/tmp/、/var/lib/php/session或/var/lib/php5/session等位置

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

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

    1. 容器中的身份验证
    2. 请求。getSession()或请求。调用getSession(true)

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

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

    如果你想得到会话id和相关信息的列表,这样你就可以查看,will将不得不编写代码。有多种方法可以做到这一点。例如:

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

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

    默认情况下,应用服务器会让你很难获得你想要的信息,但只需稍加编码,你就可以绕过它

  2. # 2 楼答案

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

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

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