如果不再生成一个session,那么Tomcat到底是怎么判断该不该生成一个新的session的?是根据IP还是路径?

解决方案 »

  1.   

    session是指客户端和服务器的一次会话,一般情况下都是在浏览器关闭的时候作为一次会话的结束,这个时候为这个用户创建的session会销毁,而不是像你说的访问一个文件就生成一个session。关于session你可以在csdn的文档查一下,有几篇说的还是比较详细的。
      

  2.   

    imA(阿梁) ( ) 信誉:5  2006-03-23 09:26:00  得分: 0  
     
     
       session是指客户端和服务器的一次会话,一般情况下都是在浏览器关闭的时候作为一次会话的结束,这个时候为这个用户创建的session会销毁,而不是像你说的访问一个文件就生成一个session。关于session你可以在csdn的文档查一下,有几篇说的还是比较详细的。
    =====================================================================1、我关闭浏览器,服务器那边能知道吗?
    2、回答我的问题: 我在客户端访问2.jsp,系统会不会生成一个新的session?  
     
      

  3.   

    1、我关闭浏览器,服务器那边能知道吗? 知道
    2、回答我的问题: 我在客户端访问2.jsp,系统会不会生成一个新的session? 不会
      

  4.   

    session是指客户端和服务器的一次会话,但并不表示浏览器关闭session就会失效。
    通常session都有一个有效时间,比如你说的例子,访问1.jsp时生成的session,如果在访问2.jsp时没有失效,则系统不新生成session;反之,则生成新的session.
    WEB服务器会在新生成session时,用一个sessionID来表示该session。通过cookie或者url重写等方式在客户端和服务器间传递该sessionID,据此来判断是不是该生成新的session
      

  5.   

    希望楼上的不要误导LZ!
    关闭浏览器,服务器是不可能知道的。因为本来HTTP就是无状态的!
    “一般情况下都是在浏览器关闭的时候作为一次会话的结束”也不无道理,因为保存sessionID的cookie的生命周期在浏览器内,浏览器关闭时改cookie也就消失了。但是服务器端的session依然会存在一段时间,直到其失效!
      

  6.   

    既然打开2.jsp不会再生成一个新的session,那么tomcat是如何做到的呢?他总得根据点什么来决定,不再生成一个新的session吧?就是这一点,我始终不明白!
      

  7.   

    ........
    无言了,LZ可知道cookie是什么东西?
    再不明白我也解释不了了,自己去找篇session的文章看看吧!
      

  8.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 10:08:00  得分: 0  
     
       ........
    无言了,LZ可知道cookie是什么东西?
    再不明白我也解释不了了,自己去找篇session的文章看看吧!
    ===============================================================  
     
    我认为cookie和session是两码事,因为有的客户端是拒绝cookie的。
      

  9.   

    谁来告诉我,tomcat是根据什么来决定,不再生成一个新的session的?特别是在客户端拒绝cookie的情况下。具体的步骤是什么?
      

  10.   

    http://community.csdn.net/Expert/topic/4633/4633580.xml?temp=.3762018
    看看这片文章了,太多了,不想打了...
      

  11.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 10:23:00  得分: 0  
     
     url重写
    ===========================================================谁能说说url重写是怎么回事吗?具体的过程是什么?
      
     
      

  12.   

    url重写就是将session附加到url中。
    还有客户端是拒绝cookie并不等于没有cookie。
    应该拒绝的只是存储在硬盘上的cookie(个人观点)
      

  13.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 11:42:00  得分: 0  
     
    url重写就是将session附加到url中。
    还有客户端是拒绝cookie并不等于没有cookie。
    应该拒绝的只是存储在硬盘上的cookie(个人观点)
    ------------------------------------------------------------1、将session附加到url中,只有在服务器返回的时候才可以这么做。但是我新打开一个2.jsp,他又怎么能做到呢。2、既然cookie不可以存储在硬盘上,那么当我关掉ie的时候,它就不存在了。那么我再打开2.jsp的时候,他怎么可能还存在?
     
      

  14.   

    可能我理解的有问题
    如果你说的先访问1.jsp再访问2.jsp是打开两个IE的话,那肯定是2个session!
    即使你访问相同的页面,打开两个IE也是2个不同的session!
      

  15.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 12:28:00  得分: 0  
     
     
       可能我理解的有问题
    如果你说的先访问1.jsp再访问2.jsp是打开两个IE的话,那肯定是2个session!
    即使你访问相同的页面,打开两个IE也是2个不同的session!
    ================================================================不是吧?  
     
      

  16.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 13:12:00  得分: 0  
     
     
       你认为不是就不是吧
    =================================================这个问题要弄明白!谁来再说说?
      
     
      

  17.   

    minisun2000(红色枫叶):我试验过了,果然如你所说。但是这样的话,session就没有什么用处了啊,在一个web应用中不能用它啊!因为用户可能又从新的ie来打开程序呢,你们怎么用session啊
      

  18.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 13:53:00  得分: 0  
     
     不知道你用session来干什么?
    =================================================================我以前是想,用这个session来存储一个web应用的全局变量呢!  比如说,用户登陆了,就给他一个session.setAttribute('username','用户名'),我以为这下就可以到处用了。现在看来这是不行的啊!你们怎么用呢? 
      

  19.   

    你的想法完全可以啊
    但是你要判断session里是不是有username这个对象,如果没用说明用户没用登录。有的话就可以进行以后的操作了!
    同样,打开2个IE就要登录2次,这也符合逻辑。难道用户不可以用不同的用户名登录吗?
      

  20.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 14:34:00  得分: 0  
     
       你的想法完全可以啊
    但是你要判断session里是不是有username这个对象,如果没用说明用户没用登录。有的话就可以进行以后的操作了!
    同样,打开2个IE就要登录2次,这也符合逻辑。难道用户不可以用不同的用户名登录吗?
    -------------------------------------------------------------------------不对啊,如果我登陆了,这个username一定有内容了。但是如果那个用户新打开了一个IE,并且访问了一个jsp(不是登陆用的),那么这个session不就没有了吗?如果想避免这种情况,除非用户只能见到一个JSP,就是login.jsp,也就是说,程序只能有一个唯一的入口。 
      

  21.   

    楼主,如果还有什么疑问,可以看看下面的文章。相信能让你明白一些东西。
    http://dev.csdn.net/article/82/82815.shtm
      

  22.   

    session有两种方式cookie和url重写
    不过不管怎么样客户端传给服务器的都是session的ID号
    通过session的ID号码服务器在服务端找对应的session如果找到就不会重新创建否则就会创建一个新的session
    HttpSession session = request.getSession(true);
    一定要是这么一句哦,否则会出问题的..............
      

  23.   

    <font color=red>session有两种方式cookie和url重写
    不过不管怎么样客户端传给服务器的都是session的ID号
    通过session的ID号码服务器在服务端找对应的session如果找到就不会重新创建否则就会创建一个新的session
    HttpSession session = request.getSession(true);
    一定要是这么一句哦,否则会出问题的..............
    </font>
      

  24.   

    不对啊,如果我登陆了,这个username一定有内容了。但是如果那个用户新打开了一个IE,并且访问了一个jsp(不是登陆用的),那么这个session不就没有了吗?如果想避免这种情况,除非用户只能见到一个JSP,就是login.jsp,也就是说,程序只能有一个唯一的入口。
    ===================================================================================还是没理解~~
    你登录时,你的session里有了username。如果另一个用户新打开了一个IE,并且访问了一个jsp(不是登陆用的),但是他的session里没有username!
    还有,服务器维护的不是一个session,而是一些session的mapping。
      

  25.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 16:31:00  得分: 0  还是没理解~~
    你登录时,你的session里有了username。如果另一个用户新打开了一个IE,并且访问了一个jsp(不是登陆用的),但是他的session里没有username!
    还有,服务器维护的不是一个session,而是一些session的mapping。
    ==================================================================我说的不是另一个新用户,而是就是本用户。  如果本用户用新IE打开一个不是登陆的JSP,就会把原来那个session 干掉,是不是呢。那么只有不让用户直接打开别的JSP了?
     
      

  26.   

    如果本用户用新IE打开一个不是登陆的JSP,服务器会为该次会话创建新的sessin,和上一次的没关系!!!!!!!
    服务器根本不知道是那个用户,只知道是哪个session!
    你问了这么多问题,其实连session是什么都不知道,最好找找其他的东西看看!
      

  27.   

    1、我关闭浏览器,服务器那边能知道吗? 知道
    2、回答我的问题: 我在客户端访问2.jsp,系统会不会生成一个新的session? 不会这个……也太误导人了吧
    建议楼主先看看Cookie 和Session 的机制
      

  28.   

    个人观点:服务端是靠sessionid 来判断是哪个session 所谓 的cookie和url重写都是要在浏览器第二次发送请求是把sessionid 带上。
    如果打开一个新的窗口要分两种情况:1.两个ie是不同进程:这时新ie并没有已打开窗口的资源(也就是sessionid)当然是不同的session
    2.新开窗口与上个窗口是同一个进程,即不同线程(在ie上“文件”下新建窗口就是这种情况)
    这样新窗口可以共享已有资源(sessionid)这样的两个窗口是同一个session
      

  29.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 17:23:00  得分: 0  
     
       如果本用户用新IE打开一个不是登陆的JSP,服务器会为该次会话创建新的sessin,和上一次的没关系!!!!!!!
    服务器根本不知道是那个用户,只知道是哪个session!
    你问了这么多问题,其实连session是什么都不知道,最好找找其他的东西看看!
    ====================================================================  
     
    谢谢你这样耐心的教导,现在我明白了。但是,我说的问题依然存在:打开一个新的jsp,确实服务器会为该次会话创建新的session,而没有破坏原来的session。但是你要知道,在这个新JSP中也要访问session,他还会按照原来的session去取“username”,但是由于是新的,这里是没有username的,这样就会造成错误。所以,一个应用程序,要么只能有一个入口,要么就不能用session,我说的对吗?
      

  30.   

    session是会话的意思,是以IE的实例化单位为单位的
    也就是你没有关闭这个IE那么这个IE相关的页面里的session是一致的。
    如果你重新打开一个新的IE(不是CTRL+N打开),那么这就是一个新的session了。为什么服务器端会知道在什么情况下是新的session,因为session是会话,如果这个request是新的,那么当然会知道。你就这样理解吧,request.getsessions().get... 如果已经有了,那么在会话过程中是会保存的,否则反之。
      

  31.   

    minisun2000(红色枫叶) ( ) 信誉:100  2006-03-23 17:23:00  得分: 0  
     
       如果本用户用新IE打开一个不是登陆的JSP,服务器会为该次会话创建新的sessin,和上一次的没关系!!!!!!!
    服务器根本不知道是那个用户,只知道是哪个session!
    你问了这么多问题,其实连session是什么都不知道,最好找找其他的东西看看!
    ====================================================================  
     
    谢谢你这样耐心的教导,现在我明白了。但是,我说的问题依然存在:打开一个新的jsp,确实服务器会为该次会话创建新的session,而没有破坏原来的session。但是你要知道,在这个新JSP中也要访问session,他还会按照原来的session去取“username”,但是由于是新的,这里是没有username的,这样就会造成错误。所以,一个应用程序,要么只能有一个入口,要么就不能用session,我说的对吗?
    ====================================================================================
    升级成5个三角了,高兴,再来回答你!
    你前面说的没错,重新打开一个IE,访问新的JSP时,由于该次session和上次的不同,因此会像你说的一样,造成错误,这是正常的!因为你新打开的IE没有进行用户登录!通常这种情况都会转向错误页面,通知用户登录!
    至于你后面说的,“一个应用程序,要么只能有一个入口,要么就不能用session”,我就不太明白了?一般来说一个应用都是只有一个入口的(当然也有特殊的),不过这和用不用session有什么关系?
    还有,你是不是想叫用户登录一次以后访问其他的JSP时就不用再登录了?那样的话你只能用cookie,其他的方法我就不知道了,看楼下的吧^_^
      

  32.   

    session变量通常保存在服务器端
    这是和COOKIE变量的不同这处
    但是:WEB程序是无状态的
    所以要识别不同的SESSIONID
    这个实现方法有三种:
    1、COOKIE保存ID
    2、URL保存ID
    3、隐藏域保存ID
    再通过ID来查询在服务器端保存的变量
    以上是学习PHP时的认识,供参考
      

  33.   

    一、服务端是靠sessionid 来判断是哪个session 所谓 的cookie和url重写都是要在浏览器第二次发送请求是把sessionid 带上。
    如果打开一个新的窗口要分两种情况:1.两个ie是不同进程:这时新ie并没有已打开窗口的资源(也就是sessionid)当然是不同的session
    2.新开窗口与上个窗口是同一个进程,即不同线程(在ie上“文件”下新建窗口就是这种情况)
    这样新窗口可以共享已有资源(sessionid)这样的两个窗口是同一个session
    二、要识别不同的SESSIONID有三种方法:
    1、COOKIE保存ID
    2、URL保存ID
    3、隐藏域保存ID
      

  34.   

    其实楼主要想实现的东西,是不是要用application域而不是session域来实现?
      

  35.   

    http://dev.csdn.net/article/82/82815.shtm
    imA给的地址,很牛的文章啊,看看就明白了,呵呵!~谢谢啊