其中User是自定义的javabean,实现了HttpSessionBindingListener 接口.
UserList 是自定义的一个用户名列表类.但是,这个程序片段 ,用相同用户名登陆的话.会出现重复用户现象.
难道是我的判断式 if(null==user || !name.equals(user.getName()))  有问题么?
望大侠帮忙!<%
request.setCharacterEncoding("gb2312");
String name=request.getParameter("user");
String pwd=request.getParameter("password");

if(null==name || name.equals("") || null==pwd ||pwd.equals(""))
{
response.sendRedirect("login.html");
}
else
{
User user=(User)session.getAttribute("user");
if(null==user || !name.equals(user.getName())) // 我这里的判断有问题么?
{

user=new User(name);
session.setAttribute("user",user);
}
UserList ul=UserList.getInstance();
%>

解决方案 »

  1.   

    user.getName()得到的是同一进程里面session的用户名
    不同进程里面的就不能判断了,就会出现重复
      

  2.   

    if(null==name || name.equals("") || null==pwd ||pwd.equals(""))
    {
    response.sendRedirect("login.html");
    }
    判断的时候if(name == null || name.equals("")|| pwd == null || pwd.equals(""))并且session里的获取有点不懂.
    我一般是用一个字符来获取String user_name = (String)session.getAttribute("user");
    从BEAN中获取String name = User.getName().trim();
    你再判断:if(name.equals(user_name));
    并且建议你啊,多加一些在后台打印的注释,这样可以帮助你啊,知道你获取到的值是不是存在.
      

  3.   

    你第一次登陆的时候没有存储user啊。
    <%
    request.setCharacterEncoding("gb2312");
    String name=request.getParameter("user");
    String pwd=request.getParameter("password");

    if(null==name || name.equals("") || null==pwd ||pwd.equals(""))
    {
    response.sendRedirect("login.html");
    }
    else
    {        user=new User(name);
             session.setAttribute("user",user);

    UserList ul=UserList.getInstance();
    %>
      

  4.   

    feigme(泡沫微笑。o 0) 
    user.getName()得到的是同一进程里面session的用户名
    不同进程里面的就不能判断了,就会出现重复===============================================================================
    忘记说了,我的UserList用的是单例模式.按道理.每个登陆者应该是共用一个UserList吧.是这样的么?
      

  5.   

    用Token!!!
    多经典的做法!