【问题标题】:Pass expired session variable value in to a subsequent request将过期的会话变量值传递给后续请求
【发布时间】:2011-12-02 00:04:09
【问题描述】:

我有一个 JSf 应用程序,用户从另一个站点调用该应用程序(假设 test.com )。当从 test.com 调用我的应用程序时,它会向我发送一个 get 参数,并据此决定需要应用哪个样式表。

示例调用:myapp.com?style=aaa

基于样式参数,我正在为 myapp 应用样式表。在这里,我从样式参数值中找到样式表,并将其保存在会话中以供其他页面使用。

问题:

当 tomcat 会话到期时,我丢失了我的样式信息,并且我的网站转到了默认样式表(用户按下浏览器重新加载按钮或在会话到期后提交表单)。即使在会话到期后,我仍然如何保留样式表信息。

我不能将样式信息作为应用程序级别参数,因为它是根据 test.com 调用而变化的。

谢谢

【问题讨论】:

    标签: jsp session jsf tomcat


    【解决方案1】:

    一个用户在 myapp.com 中可能有多个登录名。因此,多个调用可以来自单个浏览器,例如 myapp.com?style=aaa、myapp.com?style=bbb。所以使用 cookie 可能会很困难。

    您需要继续将样式作为请求参数传递,方法是将其作为<f:param> 添加到所有 JSF 页面中的所有表单和链接。

    例如

    <h:link value="link" outcome="nextpage">
        <f:param name="style" value="#{param.style}" />
    </h:link>
    

    <h:commandButton value="submit" action="#{someBean.someAction}">
        <f:param name="style" value="#{param.style}" />
    </h:commandButton>      
    

    【讨论】:

      【解决方案2】:

      如果您只想记住样式表,最好将样式表参数写入 cookie 而不是 HttpSession。这样,当会话过期并且用户返回时,他们仍然会看到他们选择的样式表。

      但是,如果他们删除了 cookie 或您的 cookie 过期,那么他们将获得默认样式表。

      一个快速的 google 想出了这个 cookie 示例http://gthill.blogspot.com/2008/01/cookies-in-jsf.html

      【讨论】:

      • 感谢您的回复。一位用户可能在 myapp.com 中有多个登录名。因此,多个调用可以来自单个浏览器,例如 myapp.com?style=aaa、myapp.com?style=bbb。所以使用 cookie 可能会很困难。
      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多