基于多用户的系统中
我把用户在登录时的信息保存在session中,如
request.getSession().setAttribute("user",user);
当访问其它页面时,这些页面在从session中读出
以进行权限判断.
但现在有一个奇怪的问题,就是在其它的机器上登录另一个帐号时,刚才那个登录帐号也变成了后登录的这个帐号.
按理说,session是保存在客户端的,怎么会重了呢
在线等

解决方案 »

  1.   

    按理说,session是保存在客户端的,怎么会重了呢首先你说的这句话不对,session是保存在服务器端的,服务器会为每个客户创建一个session.你遇到的这个问题,好像不会出现把,请把你整个流程说一下。
      

  2.   

    session的底层机制有两种
    1、cookie,cookie中会有一个字段JSESSIONID来标示你这个会话,以从服务器内存中找到正确的session.
    2、URL重写,就是把这个JSESSIONID写在URL请求参数里。
    默认情况下是cookie机制。
    你这种情况可能发生的一个原因就是JSESSIONID重复了,但这种事件的几率应该很小。
      

  3.   

    现在我在一台机子上登录
    request.getSession().setAttribute("user",user);
    在再另一台机子上登录
    request.getSession().setAttribute("user",user);
    第一个用户再想通过user字符串去查找session就找不到自己的了(因为又有一个设置了user字符串),是不是要通过id来查找呢。而且还有一个问题就是由于系统页面很多,很可能存在有一个探出页面,而且过一段时间要关闭,这个session就要消失了。
    考虑到这些情况,是否需要使用cookie来保存呢
      

  4.   

    request.getSession().setAttribute("user",user);
    为什么要使用request对象获得session?request用来上下页面传值。
    请问:对于全局的内置对象session来说,是否跟内置对象request有关?
    试下用下方法:
    session.setAttribute("user",user);
    session.getAttribute("user");
      

  5.   

    在后台代码中,也就是登录代码中,必须传递request对象才能产生session对象阿
    这个因该没有错吧
      

  6.   

    基于多用户的系统中
    我把用户在登录时的信息保存在session中,如
    request.getSession().setAttribute("user",user);
    当访问其它页面时,这些页面在从session中读出
    以进行权限判断.
    但现在有一个奇怪的问题,就是在其它的机器上登录另一个帐号时,刚才那个登录帐号也变成了后登录的这个帐号.
    按理说,session是保存在客户端的,怎么会重了呢
    在线等现在我在一台机子上登录
    request.getSession().setAttribute("user",user);
    在再另一台机子上登录
    request.getSession().setAttribute("user",user);
    第一个用户再想通过user字符串去查找session就找不到自己的了(因为又有一个设置了user字符串),是不是要通过id来查找呢。这是登录代码
    user.setYhm(yhm);
    user.setMm(mm);
    user.setQxdo(qxdo);
    user.setBm(bm);
    request.getSession().setAttribute("user",user);
    request.getSession().setAttribute("userpower",qxdo);这是前台读取代码
    Loginin login = new Loginin();
    Object yhzobj = request.getSession().getAttribute("user");
    User user = (User)yhzobj;
    if(user==null)
    {
       response.sendRedirect("/zhaotoubiao/demo/login.html");
    }
    String name = user.getYhm();
    String qx=user.getQxdo();
    对于两台机子的不同用户登录:
    及第一个用户在一台机子上登录后,如用户名是a ;
    过一段时间另一个用户b再在另一个机子上登录,用户名是b;
    这时a用户重新刷新页面得到的却是用户名b,不知道是怎么回事。
      

  7.   

    以前听说过这个问题。
    就是第二个用户刷新时显示第一个用户的信息。
    据说是服务器的一个什么设置有关系。
    你用的是websphere或者weblogic吧。
      

  8.   

    第一个用户再想通过user字符串去查找session就找不到自己的了(因为又有一个设置了user字符串),是不是要通过id来查找呢。楼主,你这个问题,真的有点郁闷哦,我到现在也没遇到过,按道理两个session是不同的啊。
    搞不懂了哦
      

  9.   

    你debug一下,看看第二个用户request.getSession()和第一个用户get出来的session对象的id是否一样,应该是不一样的。
      

  10.   

    这样的问题不少,两个用户共用一个session不是好办法.
    其实应该一个登陆用户有他自己的一个session,当有相同的session时,要么将第一个session踢掉,要么不让第二个用户登陆.两个相同的session没什么意义.
      

  11.   

    对啊
    应该写成 
    session.setAttribute("user",user);String user = session.getAttribute("user");
      

  12.   

    可能是request.getsession()的问题。
      

  13.   

    上边说过了request和session同属于jsp两内置对象,至于request能不能点出getsession()方法就不知道了,没有这么用过。
    但是有一点,request对象适用于上下页面传值。
    session是全局性质的对象。
    这样你的代码:request.getSession().setAttribute("user",user);是不是可以解释成为上个页面的session设置user值呢?
    to:jiyanliang在后台代码中,也就是登录代码中,必须传递request对象才能产生session对象阿
    这个因该没有错吧这句话从根本上就有问题,session是不会依赖request,并且session是一个静态的,可以不用初始就可以适用的全局对象,Tomcat会自己维护session对象,程序员使用就行了。
    所以你说session出问题,很大的可能性在代码编写上,因为大家都在用,谁出过问题呢?我是没有遇到过。
      

  14.   

    上边说过了request和session同属于jsp两内置对象,至于request能不能点出getsession()方法就不知道了,没有这么用过。
    但是有一点,request对象适用于上下页面传值。
    session是全局性质的对象。
    这样你的代码:request.getSession().setAttribute("user",user);是不是可以解释成为上个页面的session设置user值呢?
    to:jiyanliang在后台代码中,也就是登录代码中,必须传递request对象才能产生session对象阿
    这个因该没有错吧这句话从根本上就有问题,session是不会依赖request,并且session是一个静态的,可以不用初始就可以适用的全局对象,Tomcat会自己维护session对象,程序员使用就行了。
    所以你说session出问题,很大的可能性在代码编写上,因为大家都在用,谁出过问题呢?我是没有遇到过。