不同的电脑共用一个session,不可能吧???

解决方案 »

  1.   

    可能一个IE没有关闭,接着打开另一个,这样就共用一个session,而且必须是同一个机器
      

  2.   

    不可思议,你把你的源程序发给我看看吧·!
    [email protected]
      

  3.   

    我也知道不可能,但是确实发生了,就是说session变成了一个系统变量,而不是一个会话变量。
      

  4.   

    csdn的论坛也有这问题,我试过同时用两用户登录
    回贴时都是用后一个用户的ID回的。
      

  5.   

    你是用Ctrl + N 打开的页面?
      

  6.   

    我在电脑A上用“张三”,这时我看见“张三”的内容,之后,我在电脑B上用“李四”登录后,这时,我再到电脑A上,刷新页面,“张三”的内容马上变成“李四”的内容 了。代码很简单,我就是在登录的时候把“UserId”放进session,如前面所写,然后用到SQL语句时,再取出"userId",如:sql="select * from ....where userid="+(String)session.getAttribute("UserID")
      

  7.   

    不会是同一个IE的连接所成,在不同的电脑上的IE也是这种情况。
      

  8.   

    session是和cookie配合使用的,一台机器对相同url缺省情况下使用一个cookie,所以后者会取代前者的session,可以明确使用cookie来改变这一点。不同电脑不可能会用同一session的!否则就是你发现了MS的bug我估计你的原意是不同电脑上也是相同情况出现吧。
      

  9.   

    to:learnner
    是这种情况,同一台机器,不同的机器都 是这种情况。
      

  10.   

    你的ie是重前一个ie ctrl+N打开的吗?这样就有可能是一样的session,如果是新开的就可以了。
      

  11.   

    在不同的电脑上的IE也是这种情况,就不用考虑是否是新的IE窗口。我在电脑A上用“张三”登录,这时我看见“张三”的内容,之后,我在电脑B上用“李四”登录后,这时,我再到电脑A上,刷新页面,“张三”的内容马上变成“李四”的内容 了。
      

  12.   

    我也发现过这样的问题,但我研究后发现这样一个规律:
    首先我讲一下我要用到的概念:
    1、由桌面IE图标打开的窗口称为“父窗口”,父窗口与父窗口之间称为“兄弟窗口”
    2、由父窗口新弹出的窗口称为“子窗口”
    3、由子窗口弹出的窗口称为“孙窗口”,这时这个子窗口也称为孙窗口的父窗口
    兄弟窗口之间共享同一个Cookies和Session
    子窗口及其产生的孙窗口共享同一个Cookies和Session
    由不同父窗口产生的子窗口用的是不同的Cookies和Session
      

  13.   

    还有一点我忘了讲
    父窗口与其后代窗口用不同的Session和Cookies
    如果要解决这个问题你可以用子窗口中实现这个Session,这样就不会相互干挠
    我觉得这一点中国工商银行网站做得很好
      

  14.   

    关于这个问题,我想再强调一下:请大家仔细看下面:我在电脑A上用“张三”登录,这时我看见“张三”的内容,之后,我在电脑B上用“李四”登录后,这时,我再到电脑A上,刷新页面,“张三”的内容马上变成“李四”的内容 了。
      

  15.   

    以前我的程序好像也有这样的问题,但是只是在ie6版本是这样,ie5就是好的。
      

  16.   

    session=request.getSession(false); 也不行!登录的原码如下:  public boolean doLogin (LogonForm lf, HttpServletRequest request)
      {
        String user = "";
        String password = "";
        user = lf.getUser();
        password = lf.getPassword();    if (checkLogin(user, password))
        {
          uri.setUserIP(request.getRemoteAddr());
          uri.setUserPort(request.getServerPort());
          uri.setUserSessionId(request.getRequestedSessionId());
          session=request.getSession(false);
          session.setAttribute("URI", uri);
        //  request.getSession().setAttribute("URI",uri);
          System.out.println("URI's username="+uri.getUserName());
          return true;
        }
        return false;
      }
      

  17.   

    终于找到 原因了,是因为我在上面这个方法外,声明并new了这个uri,也就是说uri我声明成这个bean的属性:并在初始值new了一下,如下:package com.tosail.zhts.logon;import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
    import javax.servlet.http.*;
    import java.util.*;
    import javax.sql.*;
    import com.tosail.zhts.right.*;
    import com.tosail.database.*;
    import com.tosail.utility.*;
    import com.tosail.system.*;
    import com.tosail.utility.*;public class LogonAction extends Action
    {
      private String userId = "";
      UserRightInfo uri = new UserRightInfo();  // 就是这句惹的祸!!!!  public ActionForward perform(ActionMapping mapping,ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response) throws IOException,
          ServletException
      {
        String forwardPage = "index";
        String forwardLogonPage = "logon";
        LogonForm lf = (LogonForm) form;    boolean iflogin = false;
        try
        {
          iflogin = doLogin(lf,request);
          if (iflogin)
          {
            DBExecuteBean dbe = new DBExecuteBean();
            dbe.executeUpdateSQL(Log.getLogSql(request,Log.LOG_LOGON,Log.LOGON_ZHTS));
            SuccessForm sf = new SuccessForm();
            sf.setForwardPage(lf.getForwardPage());
            System.out.println("forwardPage="+lf.getForwardPage());
            sf.setMessage("您已经成功登录!");
            request.setAttribute("sf",sf);
            forwardPage = "success";
          }
          else
          {
            ErrorForm ef = new ErrorForm();
            ef.setForwardPage("");
            ef.setMessage("登录失败!您没有相应权限,请下载需求表,填写好邮给我们。我们将在3个工作日内给你回复!谢谢您的参予。");
            request.setAttribute("ef",ef);
            forwardPage = "error";
          }
        }
        catch (Exception ex)
        {
          System.out.println(ex.toString());
        }
        return (mapping.findForward(forwardPage));
      }  public boolean doLogin(LogonForm lf,HttpServletRequest request)
      {
        String user = "";
        String password = "";
        user = lf.getUser();
        password = lf.getPassword();    if (checkLogin(user,password))
        {
          // doGetRight(uri);
          uri.setUserIP(request.getRemoteAddr());
          uri.setUserPort(request.getServerPort());
          uri.setUserSessionId(request.getRequestedSessionId());
          request.getSession().setAttribute("URI",uri);
          return true;
        }
        return false;
     }把UserRightInfo uri = new UserRightInfo();  改成:UserRightInfo uri =null;就行了。
    这也说明request.getSession().setAttribute("URI",uri);set时,是传引用,而不是传值!!!
    问题已经结束!谢谢大家!!