1.是不是只要一打开一个页面就会产生一个jsessionid?
2.在不关闭浏览器的情况下,什么时候jsessionid会改变?我登陆后,登陆然后退出,jsessionid会有什么变化?
3.session和jsessionid有什么关系?
谢谢!

解决方案 »

  1.   

    第3个问题:jsessionid是session的标识。这就好比每个人都有身份证一样。
      

  2.   

    首先,并不是说你一打开一个页面就会产生一个session。
    所谓session你可以这样理解:当你与服务端进行会话时,比如说登陆成功后,服务端会为你开壁一块内存区间,用以存放你这次会话的一些内容,比如说用户名之类的。那么就需要一个东西来标志这个内存区间是你的而不是别人的,这个东西就是session id(jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),而这个内存区间你可以理解为session。
    然后,服务器会将这个session id发回给你的浏览器,放入你的浏览器的cookies中(这个cookies是内存cookies,跟一般的不一样,它会随着浏览器的关闭而消失)。
    之后,只有你浏览器没有关闭,你每向服务器发请求,服务器就会从你发送过来的cookies中拿出这个session id,然后根据这个session id到相应的内存中取你之前存放的数据。
    但是,如果你退出登陆了,服务器会清掉属于你的内存区域,所以你再登的话,会产生一个新的session了。
    不好意思,我可能说得不太清楚,但这方面的知识网上有不少,你可以了解下session的原理。
      

  3.   

    我先说说我的理解,如果有不正确的地方,希望大家指正。jsession是什么:jsessionid是session的标识。这就好比每个人都有身份证一样。为什么会有jsessionid,这个东东有什么用呢?jsessionid解释的解释如下:这是一个保险措施 
    因为Session默认是需要Cookie支持的,但有些客户浏览器是关闭Cookie的【而jsessionid是存储在Cookie中的,如果禁用Cookie的话,也就是说服务器那边得不到jsessionid,这样也就没法根据jsessionid获得对应的session了,获得不了session就得不到session中存储的数据了。】
    这个时候就需要在URL中指定服务器上的session标识,也就是类似于“jsessionid=5F4771183629C9834F8382E23BE13C4C” 这种格式。
    用一个方法(忘了方法的名字)处理URL串就可以得到这个东西,这个方法会判断你的浏览器是否开启了Cookie,如果他认为应该加他就会加上去。
    1.是不是只要一打开一个页面就会产生一个jsessionid? 
    答:显然不是的。session是有一定作用域的,而且是有时间限制的。2.在不关闭浏览器的情况下,什么时候jsessionid会改变?我登陆后,登陆然后退出,jsessionid会有什么变化? 
    答:jsessionid是服务器那边生成的,因为cookie是服务器那边送到客户端的信息。不管能不能修改jsessionid,都不应该修改,如果你修改了,这就失去了jessionid的自身意义了,你修改的话,你让服务器那边如何找到对应的session?找不到的话,你存放在那个session中的数据不是取不到了吗?
    登陆然后退出,我认为会重新生成一个jsessionid。因为退出的话,application作用域的数据都会丢失,更何况这个比它作用域还小的session?既然session都消失了,这个jsessionid有什么用?第3题已经答过了。如果理解有误的话,希望大家不吝指正。
      

  4.   

    http://blog.csdn.net/sean1203/archive/2009/12/27/5087468.aspx
    参考下
      

  5.   

    假设我设置session失效为1分钟
    1.我打开一个页面,1分钟不动,1分钟后jsessionid会改变吗?
    2.登陆后1分钟不动,然后jsessionid会变吗?
    总而言之,哪些动作会让jsessionid改变?
    页面超时?setAttributes给一个session?不太清楚...
    还望大家帮助~
      

  6.   

    1.我打开一个页面,1分钟不动,1分钟后jsessionid会改变吗? 
      如果你只是打开了登陆页面,而没有登陆,你根本就没有得到session,何谈session失效,得到session 的时机是你的登陆程序中用到了形如request.getSession()这样的语句,才会为你建一个session。
    2.登陆后1分钟不动,然后jsessionid会变吗? 
      登陆后,你的确得到了session,也拥有了一个session id(jsessionid),如果你一分钟不动,属于你的session会失效。但此时你的jsessionid并没有变,因为此时你的jsessionid是放在了你浏览器的cookies中的。如果你这时进行操作,浏览器会将你的jsessionid传送到服务器,服务器拿这个jsessionid去找属于你的session,但不好意思,这时找不到了,因为超时后被干掉了。
      

  7.   

    只要你关闭浏览器,或者超时默认的30分钟,session就会失效,在失效之前无论你是登陆还是退出,你使用的都是同一个session,即同一个session id。
      

  8.   

    当前页面有个jsessionid,10分钟后失效,然后我点回一个html页面.
    这个时候jsessionid还是跟失效之前的一样吧?
    跳转到html页面不会改变session的吧?
      

  9.   


    8楼都已经说了,超时的时候你的session就已经消失了,你再点回页面也是要重新登录的,session消失了你的信息就已经不在了~~~~
    我不是很懂但大概应该是这个样子~~~
      

  10.   

    如果要退出的话,这个session应该怎么结束?invalidate()么?在程序中应该怎么实现啊
      

  11.   

    session会自动消失吧,只要你退出,他就会自动退出,否则会等到生命周期结束才死
      

  12.   

    我发现大家有一个误区,session 并不是随着浏览器的关闭而关闭的,你要知道http协议是无状态的,服务器并不知道你什么时候关闭,session只会随着其生命周期结束或者强制销毁,所以想安全退出的话,最好使用程序把session销毁,就是session.invalidate()这个方法.这个是一定要明白的,所以为啥银行网站连session_id都加了密的,也就是为了防止有人获得了session_id后,作乱。
      

  13.   

    有个错误session.invalidate(),不是直接销毁session,是设置标记为true,表示不可用,然后清除所有Attribute变量
    源码:
    1.public void invalidate()   
    2.    {   
    3.        invalid = true;   
    4.        clearAttributes();   
    5.    }