【问题标题】:Java Web Application multiple user session handlingJava Web 应用程序多用户会话处理
【发布时间】:2011-11-28 02:55:39
【问题描述】:

我使用 Glassfish 服务器 3.1.1,并成功为用户组配置了我的领域。

虽然只有一个用户登录,但一切正常,但是当我从不同的浏览器(甚至不同的计算机)使用另一个帐户登录时,第一个会话被清除,最后登录的用户数据显示在之前的每一个会话。

我正在使用 Netbeans,我让它从 postgreSQL 数据库生成我的实体类,然后从实体生成 JSF 页面。 我阅读了有关 HttpSessions 的信息,但对我来说并不是所有事情都清楚。我应该继续这样,还是解决方案朝着不同的方向发展?如果这是正确的方法,任何人都可以给我一个示例源吗?

这是我的代码:

登录.xhtml:

<h:inputText id="email" size="25" value="#{login.email}" maxlength="30"/>
<h:inputSecret id="password" size="25" value="#{login.password}" maxlength="100"/>
<h:commandLink value="Bejelentkezés" action="#{login.loginAction}"/>

这是我的登录类的样子:

@ManagedBean(name="login")
@RequestScoped
public class LoginBean
{

private String email;
private String password;

public String loginAction()
{
    HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance()
            .getExternalContext().getRequest();
    try
    {
        System.out.println("login with: " + email + ", " + password + ".");
        req.login(email, password);
    }
    catch(ServletException e) ....

【问题讨论】:

    标签: java session jsf glassfish


    【解决方案1】:

    到目前为止发布的代码看起来不错。

    但是当我从不同的浏览器(甚至是不同的计算机)使用另一个帐户登录时,第一个会话被清除,最后登录的用户数据显示在之前的每个会话中。

    这个问题是由其他地方引起的,而不是到目前为止发布的代码。会话根本不应该被清除。这很可能是对正在发生的事情的误解。也许您不了解“会话”的概念。这些症状表明您显然在某个static 变量或@ApplicationScoped 托管bean 中控制了登录用户。确保您没有这样做。

    关于“会话”的工作原理,请阅读:How do servlets work? Instantiation, sessions, shared variables and multithreading

    关于如何选择合适的托管bean范围,请阅读:How to choose the right bean scope?

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2023-03-12
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多