我刚刚开始学习几天前开发的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
答案 0 :(得分:2)
到目前为止发布的代码看起来不错。
但是当我从另一个浏览器(甚至是另一台计算机)登录另一个帐户时,第一个会话被清除,最后登录的用户数据会显示在之前的所有会话中。 < / p>
此问题是在目前为止发布的代码中引起的。该会议根本不应该被清除。这可能是对这一事件的误解。也许你不理解“会话”的概念。这些症状表明您显然是在某个static
变量或@ApplicationScoped
托管bean中获取登录用户。确保你没有这样做。
关于“会话”的工作原理,请阅读:How do servlets work? Instantiation, sessions, shared variables and multithreading。