首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF多个用户导致ViewExpiredException

JSF多个用户导致ViewExpiredException
EN

Stack Overflow用户
提问于 2016-10-10 19:36:33
回答 1查看 191关注 0票数 0

我使用sessionMap为JSF/Primefaces站点构建了一个简单的登录系统。在我的主要视图中,ParliamentManager是一个SessionScoped bean,我有:

代码语言:javascript
复制
@PostConstruct
    public void postInit() {
      logger.log(Level.INFO,"Session started");
      ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
      Map<String, Object> sessionMap = externalContext.getSessionMap();

      user = (User) sessionMap.get("user");
      logger.log(Level.INFO, "user trader is: {0}", 
              new Object[]{user.getTrader().getTraderId().toString()});
      userId = user.getUserId();

在我的登录视图(即RequestScoped ManagedBean )中,我拥有:

代码语言:javascript
复制
public void login(ActionEvent event) {
    RequestContext requestContext = RequestContext.getCurrentInstance();
    FacesContext context = FacesContext.getCurrentInstance();
    boolean loggedIn = false;

    User user = request.findUser(username);
    if(user.getPassword().equals(this.getPassword()))
    {
        loggedIn = true;
        context.getExternalContext().invalidateSession();
        context.getExternalContext().getSession(true);
        context.getExternalContext().getSessionMap().put("user", user);
         logger.log(Level.INFO, "put user {0}", 
              new Object[]{user.getUserId()});
         logger.log(Level.INFO, "session id {0}", 
                  new Object[]{context.getExternalContext().getSessionId(false)});
        requestContext.addCallbackParam("loggedIn", loggedIn);
    }
} 

在我的登录页面中,我只是重定向到主索引页面:

代码语言:javascript
复制
<script type="text/javascript">
function handleLoginRequest(xhr, status, args) {
    if(args.validationFailed || !args.loggedIn) {
        PF('dlg').jq.effect("shake", {times:5}, 100);
    }
    else {
        PF('dlg').hide();
        $('#loginLink').fadeOut();
        window.location = "http://localhost:8080/mysite/index.xhtml"
    }
}

如果我有两个用户登录(一个在浏览器会话中,另一个在匿名会话中),这是可行的。但是,如果我添加了第三个用户(另一个invognito会话),我在表单中提交ajax请求时就会得到一个ViewExpiredException。我想我可以像我期望的那样有大量的会话,所以我不清楚为什么在这种情况下我会有异常。我是不正确地将用户和会话关联起来,还是会出现其他导致异常的问题?

谢谢你,佐博

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 06:17:40

在Chrome中,所有匿名会话共享同一个cookie jar。只有当所有匿名会话都被关闭时,它才会被摧毁。这意味着第二个匿名会话与其他匿名会话共享cookie。见1。

您可以在另一个浏览器中使用会话,也可以使用Firefox这样的浏览器进行多个私有会话,因为Firefox不共享这样的cookie。

1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39965507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档