gpt4 book ai didi

java - “陷害”tomcat6 丢失 session

转载 作者:行者123 更新时间:2023-12-02 13:02:09 24 4
gpt4 key购买 nike

IWS 是一个桌面应用程序,具有自己的 WebBrowser 组件,可在需要时调用脚本 Web 应用程序。脚本位于 Tomcat6 中。

脚本基本上是一个 JSP 应用程序。 (实际上,它是一个引擎,通过图形界面上的人类操作构建 JSP 应用程序,例如定义流程、按钮、内容等,但我说的是它作为 JSP 生成的“脚本”)

我需要破解脚本,以便它可以在 IWS 应用程序的 webBrowser 组件中共享空间(通过框架)。

IWS 调用 start.jsp 2 次:

  • 第一次,以隐藏方式(可能是来自 IWS 代码的直接 http 查询),没有任何特殊参数。原始的 start.jsp 执行了 2 302(因此调用总共访问了 3 个页面),它最终使用 cookie 中的 jsesionId 和作为参数(但不是在最后 302)

  • 第二次,使用 jSessionId 和一堆重要参数。它仅使用 jSessionId 作为参数。据我在fiddler中看到的,当它正常工作时不会使用cookie,因为jsessionId在它自己的内部

所以我猜第一次 ìt 只是为了获得一个新的 jSessionId。

我现在尝试的解决方案是将脚本起始页面替换为新的框架页面,该页面在它所包含的两个框架之一中加载 Web 应用程序,并在第二个框架中加载另一个应用程序。根据第一帧的数据,它将更新第二帧。

所以类似:

  • 我们有 start.jsp...(实际上它的名称不同)

  • 我们以以下内容结尾:

    • start.app.jsp(原来的start.jsp,只是重命名)

    • start.jsp(是新的,包括包装以前的 start.jsp 的 html)

新的 start.jsp 使用自己的 url,将 start.jsp 更改为 start.app.jsp,以调用 iframe 内真正的脚本应用程序。

但我一直遭受类似的 session 问题。我不是 tomcat 方面的专家。我了解到它通过 cookie 或参数控制 session 。我认为它配置为与 URL sessionId 一起使用,但我不太确定。我已将 META-INF/settings.xml 设置为禁用 session 中的 cookie 使用,但它仍然在 cookie 列表中显示 cookie。

我的问题是,在第二次调用 start.jsp 时,它看起来像是正在使用“旧 cookie”,忽略了 URL 中的 jsessionId。 WWG00000E 处出现一些奇怪的错误:WWGAIL - 错误:未为函数 getInteractionKVPair 提供 ID 详细信息:

这就像它正在返回带有另一个 jsessionid 的旧 cookie。每次出现错误时,“旧”jsessionid 都是相同的。

用 fiddler 嗅探,我看到第二个 start.jsp 以 URL 中正确的 jsessionId 开头,但它的 cookie 就像来自另一个 session ,并且它停止在每次重定向时添加 jsession id,因为发生这种情况。就像是在一个完全不同的宇宙中执行一样。这是正常的吗???

目前,我正在尝试强制 cookie jSessionId 和链接,以便它们包含 jSessionId,但没有成功。

请问你有什么想法吗?

谢谢!

Edited2:如果我将其放置在没有框架的情况下(恢复默认的start.jsp)。在 IWS 中,仅在第一次(交互)时有效,而在任何后续操作中,问题都会开始出现......

最佳答案

好的,终于解决了...

至少对于这个版本的 Tomcat:

  • 调用不带 jSessionId 的 jsp 会在您的应用 cookie 中创建一个新的 jSessionId。
  • 任何进一步的及时 html 请求都将使用 cookie jSessionId 而不是 URL 上存在的 cookie,因此您将失去任何类型的多 session 支持。

这比在 webBrowser 组件中比较特别,做了两步连接,第一个请求永远不会有关联的 cookie,所以它工作正常,给你一个带有新 jSessionId 的 cookie,然后你可以做一个新的,无 cookie,第二个请求使用 URL 的 jSessionId,并且没有 cookie 或具有不带 jSessionId 的“默认”cookie。当这个 webBrowser 请求一个在其 URL 中没有 jSessionId 的 jsp 页面时,如上所述,问题就开始了,所以如果第一个请求包含非 jSessionIded 调用,Tomcat 会给你一个在你的“默认应用程序 cookie”上设置的 jSessionId,所以第二个请求请求会忽略任何 URL jSessionId 以使用该 cookie 上的 jSessionId。

在网络浏览器中,我观察到至少在 Firefox 中,清理 cookie 不足以消除这个“默认 cookie”。但也许这就是经典的“时间太长,所以你认为它很干净,但实际上并非如此”。不确定。

我知道这听起来很困惑。我没有时间对此进行进一步的测试。

据我所知,当它工作正常时,它就像使用“ session cookie”(不带jSessionId)一样工作,而当它不工作时,它会使用“默认cookie”(带jSessionId) )并开始忽略 URL jSessionId。

我已经向 Tomcat 的开发邮件列表发送了一封电子邮件。 (有人说正确的位置是用户邮件列表...但你在这里;-))

关于java - “陷害”tomcat6 丢失 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44244853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com