这个和机器关系吗?session只不过存储在服务器端的内存中的变量而已,与客户机没有关系.
所以这样的偶尔会出现的问题只能说明编码不够安全或者不够严密,请认真检查你的程序.
尤其是设置和获取session变量的地方.特别注意的是session变量有没有命名上的重复或者冲突.

解决方案 »

  1.   

    to 立即动动:
    1) 两次登录的问题发生在固定的机器,但是出现几率也是比较低的。
    2) 这些机器配置基本一样(机器为2批,但发生这种现象的机器2批中各有一两台。
    操作系统均为win2k professional , IE6.0/IE 6.0 sp1
      

  2.   

    to VVV_lucky(*太阳*):
    Web服务器是1台,数据库服务器1台
      

  3.   

    第二个问题我发现原因了!!原来出现这种偶然几率的事件和我们使用浏览器的习惯有关。大部分人都是用explorer浏览器或其他使用其内壳的其他浏览器:如MyIE,CrazyBrowser之类的。 这种情况下,是绝对不会有任何问题的!
    而极少的情况下,我们会使用文件夹上面的浏览框里面直接输入我们系统的URL,这个时候,在此页面的所有页面均使用正常,但是,弹出页面居然会出错(权限未通过!)
    由此证明,使用文件夹直接输入URL的时候,弹出的窗体和它的父窗体不共享session!!!
      

  4.   

    说心理话,你的第一个问题,偶也碰到过,代码是我自己写的,在我的机器上很好用,可是我把代码COPY给我同事,问题就如你所说,必须登陆2次,我晕死,难道代码不严谨?我看了看也看不出什么问题,呵呵
      

  5.   

    我也问个问题!
    我这里用tomcat做了个数据库代理的程序,
    可是最近出现了了这样的错误,当我往数据库里写东西时,我只可以写8个参数,只要一加第9就个就会出错,另外以前的程序没错的,而且也验证过现在的tomcat4.1版本可以在服务器上操作,但是在本地机器上就不可以操作了,出错信息是:Sql error description is: jdbcbase.TdsException: I/O exception while talking to the server, java.net.SocketException: Connection reset by peer: socket write error
    初步估计是tomcat4.1和本地的SQL2000的冲突,
    配置 win2k professional,SQL2000服务器版,j2sdk-1_4_2-windows-i586, 
      

  6.   

    to testjava(上帝给了我高尚的灵魂) :
    那你后来实施的时候有问题吗?
    to yyn911:
    你的叙述不够详细,还是不太明白你的问题。我也说个tomcat 5和tomcat 4的问题。
    我觉得tomcat 4比较成熟好用,但5对中文的处理就不是很好了,很容易出现问题,并且有时候容易丢失http内容。
      

  7.   

    to  gameboy999(-'_'-) 
    比如: insert sdr(1,2,3,4,5,6,7,8) values (?,?,?,?,?,?,?,?)
    当有8个参数时是成功的!!(包括<8)
    insert sdr(1,2,3,4,5,6,7,8,9) values (?,?,?,?,?,?,?,?,?)
    只要再加一个就错了!!
    我试过只要是8个参数,不论是什么格式的,都对,SQL语句出错的可能没有!!
      

  8.   

    to  gameboy999(-'_'-) 
    比如: insert sdr(1,2,3,4,5,6,7,8) values (?,?,?,?,?,?,?,?)
    当有8个参数时是成功的!!(包括<8)
    insert sdr(1,2,3,4,5,6,7,8,9) values (?,?,?,?,?,?,?,?,?)
    只要再加一个就错了!!
    我试过只要是8个参数,不论是什么格式的,都对,SQL语句出错的可能没有!!
      

  9.   

    你跟踪进去看是哪报错,然后用jad反编译看看到底是怎么回事吧
      

  10.   

    你跟踪进去看是哪报错,然后用jad反编译看看到底是怎么回事吧
      

  11.   

    用什么跟踪啊!!?
    我这里只有jcreator好象不能的!!
    而且我现在不用tomcat,只是写了一个连接数据库的程序,居然也有这样的问题,
    我怀疑是我的SQL有问题,
    另外,我想知道。java中有限制输入输出流大小吗??
    我用cavaj反编译的没什么问题!!
    下面是反编译过的程序,你看看,我看不出什么问题!!
    import java.io.PrintStream;
    import java.sql.*;
    import java.util.Properties;public class DOSE
    {    public DOSE()
        {
        }    public static void main(String args[])
        {
            Object obj = null;
            Properties properties = new Properties();
            try
            {
                String s = "2003-10-1 10:10:10";
                String s1 = "2003-10-1 10:50:10";
                String s2 = "40";
                Object obj1 = null;
                Object obj2 = null;
                Object obj3 = null;
                Object obj4 = null;
                Object obj5 = null;
                Object obj6 = null;
                Object obj7 = null;
                Object obj8 = null;
                Object obj9 = null;
                Object obj10 = null;
                Object obj11 = null;
                Object obj12 = null;
                Object obj13 = null;
                Object obj14 = null;
                Object obj15 = null;
                Object obj16 = null;
                Object obj17 = null;
                Object obj18 = null;
                Object obj19 = null;
                Object obj20 = null;
                Object obj21 = null;
                Object obj22 = null;
                Object obj23 = null;
                Object obj24 = null;
                Object obj25 = null;
                Object obj26 = null;
                String s3 = "200001";
                String s4 = "1001";
                String s5 = "110011";
                String s6 = "10000225100";
                double d = 0.5D;
                double d1 = 0.5D;
                String s7 = null;
                Class.forName("jdbc.MicrosoftDriver").newInstance();
                String s8 = "MUMS99";
                String s9 = "missile101";
                String s10 = "jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=MUMS99";
                Connection connection = DriverManager.getConnection(s10, s8, s9);
                s7 = "insert into sdr(service_start,service_end,platform_no,service_time,service_code," +
    "customer_no,account_id,rate,record_time,usage_amount) values (?,?,?,?,?,?,?,?,ge" +
    "tdate(),?)"
    ;
                PreparedStatement preparedstatement = connection.prepareStatement(s7);
                preparedstatement.setString(1, s);
                preparedstatement.setString(2, s1);
                preparedstatement.setString(3, s3);
                preparedstatement.setString(4, s2);
                preparedstatement.setString(5, s4);
                preparedstatement.setString(6, s6);
                preparedstatement.setString(7, s5);
                preparedstatement.setDouble(8, d);
                preparedstatement.setDouble(9, d1);
                int i = preparedstatement.executeUpdate();
                if(i > 0)
                {
                    System.out.println("01");
                } else
                {
                    System.out.println("99");
                }
                preparedstatement.close();
                connection.close();
            }
            catch(SQLException sqlexception)
            {
                System.out.println(sqlexception.toString());
            }
            catch(Exception exception)
            {
                System.out.println(exception.toString());
            }
        }
    }
      

  12.   

    <%
    response.addHeader("Pragma" , "no-cache") ;
    response.addHeader("Cache-Control", "no-cache");
    response.addDateHeader("Expires",0);  
    %>
    页面都加上.不敢肯定是否是缓存问题.反正偶试过这种情况(系统登录部分).建议测试时用最多问题的电脑进行测试
      

  13.   

    to makepage79:
    明天到公司就试试!
    可是最近公司机器都比较少出现登录2次的现象
      

  14.   

    我说个例子,我在自己的XP pro 上安装jive 3.1.1,登录一次就成功在windows server 2000上安装的给大家用的,经常要登陆两次. 呵呵,原因何在?
      

  15.   

    学习,我想学,不过对WEB没兴QU。
      

  16.   

    s7 = "insert into sdr(service_start,service_end,platform_no,service_time,service_code," +
    "customer_no,account_id,rate,record_time,usage_amount) values (?,?,?,?,?,?,?,?,getdate(),?)"中间有个getdate()?是不是该调整一下问号的位置。可能你的问题真的很奇怪 @__@
      

  17.   

    to mythos:
    没有兴趣是不对的,毕竟瘦客户端是发展方向嘛 :)我以前VC/VB/Delphi/CB都做过的哦。
      

  18.   

    gameboy999(-'_'-) 激发了我的斗智,不搞C++了,搞WEB。
    尽快完成我的项目,开WEB,给我点支持。
      

  19.   

    你们能不能换个 web server, 比如 resin, 测一下, 到底是不是  tomcat 的问题?
      

  20.   

    to zhangking:这个我们正准备测,但是第二个问题很大可能就是windows folder和explorer访问的问题。
      

  21.   

    你把你的SQL语句生成出来之后拿到数据库里试一下生成出来的语名是否正确,如果直接在数据库上能用再找其它的原因。
      

  22.   

    to  gameboy999(-'_'-)
    你的第二个问题出现的原因确实是windows folder和explorer访问的问题。我们这边也碰到过。这两个东西确实不是共享一个session.可大家都不清楚为什么会这样,现在还没找到一个权威的解释。关注大家。
      

  23.   

    TO:gameboy999 (-'_'-) 
    SORRY~偶没看清你的问题就回答你了~两次登录问题曾经遇过那时候系统登录包含SESSION+COOKIE,后来不用COOKIE后基本没问题(<==可能偶的程序有问题).另一个是一个用户登录进去之后有时候显示前一个用户的信息(<==当然这是缓存的问题),还有其他一些小问题如果真是windows folder和explorer访问的问题,那也没什么办法,只好要求用户用合适的explorer.
      

  24.   

    to gameboy999(-'_'-)
    问题二的原因:
    在windows folder是会出现第二个问题的.原因是由于弹出页面是explorer,explorer和windows folder是不可能存在继承它的父页面的session的情况.问题1:
    要进行几个方面的判断
    1.在出错时,如果你不管他,点其它要登陆的页面,然后再点刚才出错的这个页面,如果依然错误,那么就可以确定是缓存的问题.2.一般的流程是这样的:
    验证页面
    if (request.getParameter("username")== null)
    {
          request.setParameter("lastURL") == 当前页面的URL;
          PageContext.forward("login.jsp");
    }
    登陆页面
    ...
    if (验证成功)
    {
          String slastURL = request.getParameter("lastURL");
          if (slastURL == null) slastURL = "success.jsp";
          PageContext.forward(slastURL);
    }从你的介绍看,你们的与上面有些不同,有一个"用户未登录的错误提示页"
    我猜测你们的流程是这样走的,
    用户进入保护页--->安全检查发现未登陆--->转入"用户未登录的错误提示页"--->转入登陆页
    如果是这样的话,在登陆面进行合法检查通过后,它将会将页面导向"用户未登录的错误提示页",于是就出现了你的问题1
    而如果走正常的流程,一开始先登陆--->登出成功的提示页--->点击其它页面,就不会出任何问题.如果还是有问题,我建议你将你们的登陆流程大致写出来一下,也好帮你查原因些
      

  25.   

    第二个问题
    是因为你用文件浏览器打开的原因,如果用IE就不会有问题了
    可以考虑将系统入口做成快捷方式,用IE打开
    可以防止用户用文件浏览器访问系统
      

  26.   

    to starfeng(feng):
       流程基本如你所说   登陆页 -->  填充必须的session --> 成功后Redirect到 index.jsp/index servlet---> index servlet验证session是否存在   ---存在--->  正常登陆
                            |
                            |--不存在--->  到统一错误处理页面 --> 用户点击返回到登陆页
      

  27.   

    我没有使用session,而是使用一个javabean,scope=session来处理这个问题,到目前位置还没有出现你所说的问题。
      

  28.   

    to 玩玩儿:
    你们使用javabean来保存信息,那你们怎么维护? 使用了TTL(Time To Live)方式吗?而且使用javabean的方式恐怕需要客户端回写用户名或验证id吧 (rewrite)
      

  29.   

    我能想到的错误都被大家说遍了 ,真不知道该怎么帮你了
    那就祝愿你明天测试一举通过吧
      Good Luck!
      

  30.   

    现在已经解决了一半的问题,虽然是我们自己先找到第一个问题的答案,不过为了表示对大家的感谢,先付500分答谢!请wllmmm(断剑) remanwang(玩玩儿) georgeqp(菜就一个字) starfeng(feng) makepage79(JAVA一旧饭,JAVA入侵者)  到我的新贴来领分此贴参与者全部给于10分