【问题标题】:Caching / redirect issues in Firefox?Firefox 中的缓存/重定向问题?
【发布时间】:2013-07-08 22:53:22
【问题描述】:

我有一个自定义控件放置在我网站的选定页面上。控件的页面加载前事件调用 java 代码检查用户密码是否在 eDirectory 中过期。如果密码过期,自定义控件会将用户重定向到密码更改屏幕,用户可以在其中更改密码。使用范围变量,实际检查每个会话只运行一次。

在 IE 中一切正常。在 FireFox 中,正确检测到过期密码并正确显示密码更改屏幕。但是,如果用户试图返回触发密码更改的页面,那么他们将被带到密码更改屏幕。

似乎是浏览器将他们引导到密码更改屏幕,因为当 java 代码运行时,我将大量诊断消息打印到日志中。无论我尝试转到请求的页面多少次,我都只会在日志中看到密码的初始检查。在理论上,每次我被带到该页面时,我都应该在日志中看到多个条目。

只要页面从未触发密码更改,我就可以毫无问题地访问该页面。但如果它确实触发了更改,那么我将无法再转到该页面,因为它将带我进入密码更改屏幕。

如果我清除 FirFox 中的缓存,那么在下一次更改密码之前一切正常。

让这个问题更令人沮丧的是,它似乎只发生在我们的反向代理服务器上。我们有一个 apacahe 反向代理,允许外部浏览器访问我们的网站。反向代理服务器连接到负载平衡器服务器,并连接到两个 Domonio 服务器之一。

知道如何解决这个非常奇怪的缓存问题吗?

这是在页面加载前事件中运行的代码。

var pwdExpired:boolean = sessionScope.get("pwdExpired");

if (pwdExpired == null)
 {
var ldap:com.pnc.cld.LDAPauthentication = new com.pnc.cld.LDAPauthentication();
if (ldap.isPasswordExpired(@Name("[CN]",@UserName())))
{
    sessionScope.put("pwdExpired",true);
    var extCont = facesContext.getExternalContext();
    extCont.redirect(getURI("xp_pgChangePwd.xsp"));


}
else
    sessionScope.put("pwdExpired",false);

}

【问题讨论】:

  • 在 Firefox 中似乎有很多奇怪的问题。我之前有一个关于stackoverflow.com/questions/16610593/… 的问题,也许它也与那里的缓存有关,即使它不应该保留超时变量。
  • 当用户更改密码时,您是否将 sessionScope 变量设置为 null?对我来说似乎是逻辑错误。考虑将变量更改为 viewScope。
  • 您要向 XPage 添加哪些 http 标头/元标记?
  • 您是否尝试过设置 HTTP Header Cache-Control: no-cache, no-store
  • @Arron - 我将 sessionScope 设置为 true 或 false,具体取决于 pw 是否过期。如果更新成功,我也将其设置为 false。如果 pwdExpired 为空,我只会去 ldap。我不能使用 viewScope 变量。那没有任何意义。那我还不如根本不用。

标签: xpages xpages-ssjs


【解决方案1】:

Sven 的建议至少似乎解决了这个问题。据报道,该问题也发生在 IE9 中。我不确定这个解决方案是否解决了这个问题,因为我还不能测试它。

这是我解决问题的方法:

var extCont = facesContext.getExternalContext();
var response = extCont.getResponse();

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 2011-10-22
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多