JSF HttpSession 属性在刷新/重定向后变为空




我正在测试使用 httpsession 的简单登录,因此在对用户进行身份验证后,我将用户属性添加到 http 会话:

@ManagedBean
@SessionScoped
public class loginView {
....
  public String connect() {
      FacesContext context = FacesContext.getCurrentInstance();
      if (authenticated) {
          context.getExternalContext().getSessionMap().put("user", login);
          return "/home/NewFile?faces-redirect=true";
      } else {
          context.addMessage(null, new FacesMessage("Unknown login, try again"));
          login = "";
          pwd = "";
          return null;
      }
  }
}

当我从登录视图调用此函数时,它会像预期的那样重定向到NewFile.xhtml。在上述 xhtml 中,我使用 #{user} 显示 "user" 属性。到目前为止,一切正常,但是当我刷新页面(NewFile.xhtml(或重定向到另一个页面并尝试显示"user"属性时,我得到null,这是预期的吗?刷新或重定向会创建另一个 httpsession 吗?还是只是删除我添加的属性?

经过一些研究,我成功地解决了我的问题,事实证明这只是我的一个愚蠢的错误。 所以我想我应该把答案留在这里,而不是删除问题。所以这里是:
经过一番环顾四周,我发现这与 cookie 有关,所以我确实使用 chrome 的 F12 跟踪 HTTP 流量,并且每次我刷新/导航时都是服务器发送新的 cookie。经过更多的搜索和测试,我发现了导致会话失效的原因,所以我以这种方式调用注销函数(使会话无效(:事实证明outcome加载页面之前<h:button outcome="view.logout()"/>执行该函数,所以我不得不将其更改为<p:commandButton action="view.logout()"/>

相关内容

  • 没有找到相关文章

最新更新