为了在 JSF 中创建“记住我”登录,我试图了解 Cookie 的工作原理。我使用 JSF 创建了一个全新的 Web 应用程序,这个 bean 创建了一个会话到期的 Cookie:
CookieBean类
@ManagedBean
@ViewScoped
public class CookieBean implements Serializable {
public void create() {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.addResponseCookie("MyTestCookie", "Hello Cookie", null);
}
}
并且index.xhtml有这个主体:
<h:form>
<h:commandButton value="Create Cookie!" action="#{cookieBean.create()}" >
<f:ajax render="@form" />
</h:commandButton>
<p></p>
<h:outputText value="Cookie value: #{cookie['MyTestCookie'].value}" />
</h:form>
结果,当页面第一次加载时,没有 cookie,这是正确的,因为这是应用程序第一次运行,并且没有 cookie。
单击按钮一次后,不会显示任何 cookie。为什么?按钮调用该cookieBean#create()
方法,并且 ajax 标记应该强制重新评估outputText
组件。这应该生成一个HttpSerlvetRequest
带有cookie的......或不?cookie 仅在我再次按下按钮后才会显示!
更令人惊讶的是,当我按下refresh
浏览器的按钮时,cookie 没有显示,尽管我希望看到它,因为旧会话仍然存在。
就像(重新)加载页面不会向服务器发送 HttpServletRequest 一样......