JSESSIONID存储在哪里?

贝勒斯

我正在研究特定的Web应用程序如何工作,并且我想确定到底是什么信息存储在JSESSIONID会话令牌中。

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

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

谢谢你。

西莉亚斯

首先,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文件的行为。

默认情况下,应用服务器使您难以获取所需的信息,但是通过一些编码,您就可以绕开它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章