Java Web Application多用户会话处理

时间:2011-09-30 00:29:44

标签: java session jsf glassfish web

我刚刚开始学习几天前开发的Java Web Application(JSF),到目前为止,一切都很清楚。但现在我有一个问题,我真的不知道该怎么做。 我使用Glassfish服务器3.1.1,并成功为用户组配置了我的领域。

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

对不起我的无知,也许这是一个简单的问题,但我不知道从哪里开始。 我正在使用Netbeans,我让它从postgreSQL数据库生成我的实体类,然后从实体生成JSF页面。 我读到了关于HttpSessions的内容,但对我来说并不清楚。我应该继续这种方式,还是解决方案的方向不同?如果这是正确的方式,有人可以给我发送样品来源吗?

这是我的代码:

Login.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) ....

任何帮助将不胜感激!
提前致谢

Atesh

1 个答案:

答案 0 :(得分:2)

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

  

但是当我从另一个浏览器(甚至是另一台计算机)登录另一个帐户时,第一个会话被清除,最后登录的用户数据会显示在之前的所有会话中。 < / p>

此问题是在目前为止发布的代码中引起的。该会议根本不应该被清除。这可能是对这一事件的误解。也许你不理解“会话”的概念。这些症状表明您显然是在某个static变量或@ApplicationScoped托管bean中获取登录用户。确保你没有这样做。

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