【问题标题】:JSF HttpSession attribute becomes null after refresh/redirectionJSF HttpSession 属性在刷新/重定向后变为空
【发布时间】:2017-03-27 23:11:48
【问题描述】:


我正在测试一个使用 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" 属性时我得到空值,这是预期的行为吗?刷新或重定向会创建另一个 httpsession 吗?还是只是删除我添加的属性?

【问题讨论】:

    标签: jsf httpsession


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2018-02-15
      • 1970-01-01
      • 2014-03-23
      • 2020-12-31
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多