【问题标题】:GlassFish is creating a new JSESSIONID on every requestGlassFish 正在为每个请求创建一个新的 JSESSIONID
【发布时间】:2020-07-22 16:45:12
【问题描述】:

我有一个由命名 bean 支持的简单页面。该页面也使用primefaces,但我没有在该页面中做任何ajax。这些应用程序托管在 Glassfish 5.1 上。

@Named("cardsView")
@RequestScoped
public class CardsViewBean implements Serializable {
   ...
}

这是 xhtml 页面。如您所见,我将 bean 传递给主 xhtml,不确定这是最佳实践还是问题的根源。

<ui:composition template="/fragment/master.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:ipc="http://java.sun.com/jsf/composite/component">

    <ui:param name="bean" value="${cardView}" />

    <ui:define name="content">
    .....
    </ui:define>

</ui:composition>

据我了解,请求范围的 bean 只为请求而存在。

但是,当我查看浏览器检查器时,我可以看到每次点击页面时都会创建一个新的 JSESSIONID。所以我认为很明显我配置错了一些东西,但我不确定在哪里看。

【问题讨论】:

  • 你的问题根本不是JSF引起的。我建议退后一步,了解会话的工作原理。这是一个很好的起点:stackoverflow.com/q/3106452 这必须为您提供新的见解,以便能够自行调试。
  • 谢谢@BalusC 我知道会话是如何工作的 :-) 事实上,创建一个新会话听起来很奇怪。问题可能是应用程序部署在集群上,我怀疑该实例没有共享会话。
  • 如果您已经知道会话是如何工作的,那么您究竟为什么要将故障推给在服务器上运行的随机 MVC 框架?在使用任何其他 MVC 框架甚至是普通的 JSP/Servlet 时,您仍然会遇到完全相同的问题..
  • 因为经过调查,我意识到集群没有相互交谈。部署的应用程序基于 JSF。部分原始答案仍然存在,为什么 @RequestScoped bean 创建一个 JSESSIONID ?第二部分,为什么每次都创建一个新的是另一个问题。
  • @RequestScoped 不会那样做。使用 @SessionScoped 时,您会遇到完全相同的问题,并且它会错误地表现得好像它是 @RequestScoped

标签: jsf glassfish jsessionid


【解决方案1】:

实际上,每页有 2 个请求。 初始请求和回发请求。 首先,客户端发出获取页面的请求。它本身就是完整的请求。 请求:http://example.com/index 响应:html页面。 用户点击提交按钮或另一个按钮或链接后,浏览器再次请求另一个页面。 请求:http://example.com/login 回应:另一个页面。 换句话说,Jsf 或任何 Ui 框架通过各种技术和方法为我们保存 2 个请求之间的信息 见this question about Initial request and postback requestJsf lifecycleprimeFaces lifeCycle show case
最后一点:会话在 jservlet 中超时,您可以使用 web.xml 对其进行配置,如果此时间过去,您的会话将过期并为您提供另一个会话 快乐编码!

【讨论】:

  • 你没有回答实际问题。
  • 我做到了。它为每个请求创建一个会话 ID。
  • Http 是无状态的,不存在真正的会话。
  • 如果您不想更改会话 ID,请改用 @SessionScoped
猜你喜欢
  • 2011-11-05
  • 2016-08-07
  • 2011-05-15
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2021-06-15
相关资源
最近更新 更多