关于session和jsessionid的问题

hwoarangzk 2010-01-11 07:02:01
1.是不是只要一打开一个页面就会产生一个jsessionid?
2.在不关闭浏览器的情况下,什么时候jsessionid会改变?我登陆后,登陆然后退出,jsessionid会有什么变化?
3.session和jsessionid有什么关系?
谢谢!
...全文
51240 21 点赞 打赏 收藏 举报
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yjxtd3000 2012-06-25
有个错误session.invalidate(),不是直接销毁session,是设置标记为true,表示不可用,然后清除所有Attribute变量
源码:
1.public void invalidate()
2. {
3. invalid = true;
4. clearAttributes();
5. }
  • 打赏
  • 举报
回复
yjxtd3000 2012-06-25
我发现大家有一个误区,session 并不是随着浏览器的关闭而关闭的,你要知道http协议是无状态的,服务器并不知道你什么时候关闭,session只会随着其生命周期结束或者强制销毁,所以想安全退出的话,最好使用程序把session销毁,就是session.invalidate()这个方法.这个是一定要明白的,所以为啥银行网站连session_id都加了密的,也就是为了防止有人获得了session_id后,作乱。。。。
  • 打赏
  • 举报
回复
ToBeJavaer 2012-01-16
学习了~~ 谢谢各位大牛的回答
  • 打赏
  • 举报
回复
桐桐-Dragon 2011-07-11
session会自动消失吧,只要你退出,他就会自动退出,否则会等到生命周期结束才死。。。
  • 打赏
  • 举报
回复
cmajorsolo 2011-01-01
如果要退出的话,这个session应该怎么结束?invalidate()么?在程序中应该怎么实现啊
  • 打赏
  • 举报
回复
twh0516 2010-11-09
严重鄙视楼主,问题解决了也不贴出来
  • 打赏
  • 举报
回复
hwoarangzk 2010-01-13
谢谢大家~~~~
已经解决了~~~
  • 打赏
  • 举报
回复
JAVA_STU 2010-01-12
只要你关闭浏览器,或者超时默认的30分钟,session就会失效,在失效之前无论你是登陆还是退出,你使用的都是同一个session,即同一个session id。
  • 打赏
  • 举报
回复
sgl1984 2010-01-12
1.我打开一个页面,1分钟不动,1分钟后jsessionid会改变吗?
如果你只是打开了登陆页面,而没有登陆,你根本就没有得到session,何谈session失效,得到session 的时机是你的登陆程序中用到了形如request.getSession()这样的语句,才会为你建一个session。
2.登陆后1分钟不动,然后jsessionid会变吗?
登陆后,你的确得到了session,也拥有了一个session id(jsessionid),如果你一分钟不动,属于你的session会失效。但此时你的jsessionid并没有变,因为此时你的jsessionid是放在了你浏览器的cookies中的。如果你这时进行操作,浏览器会将你的jsessionid传送到服务器,服务器拿这个jsessionid去找属于你的session,但不好意思,这时找不到了,因为超时后被干掉了。
  • 打赏
  • 举报
回复
hwoarangzk 2010-01-12
假设我设置session失效为1分钟
1.我打开一个页面,1分钟不动,1分钟后jsessionid会改变吗?
2.登陆后1分钟不动,然后jsessionid会变吗?
总而言之,哪些动作会让jsessionid改变?
页面超时?setAttributes给一个session?不太清楚...
还望大家帮助~
  • 打赏
  • 举报
回复
xxo_bird 2010-01-12
[Quote=引用 8 楼 sgl1984 的回复:]
  登陆后,你的确得到了session,也拥有了一个session id(jsessionid),如果你一分钟不动,属于你的session会失效。但此时你的jsessionid并没有变,因为此时你的jsessionid是放在了你浏览器的cookies中的。如果你这时进行操作,浏览器会将你的jsessionid传送到服务器,服务器拿这个jsessionid去找属于你的session,但不好意思,这时找不到了,因为超时后被干掉了。

[/Quote]

8楼都已经说了,超时的时候你的session就已经消失了,你再点回页面也是要重新登录的,session消失了你的信息就已经不在了~~~~
我不是很懂但大概应该是这个样子~~~
  • 打赏
  • 举报
回复
hwoarangzk 2010-01-12
工作需要不得不研究啊,之前做后台的,现在做前台
谁能回答我下10L的问题啊~
  • 打赏
  • 举报
回复
config_man 2010-01-12
[Quote=引用 10 楼 hwoarangzk 的回复:]
当前页面有个jsessionid,10分钟后失效,然后我点回一个html页面.
这个时候jsessionid还是跟失效之前的一样吧?
跳转到html页面不会改变session的吧?
[/Quote]
8楼的朋友说的很好,而且很易懂。可能你的经验还不够,暂时还不能理解,建议你暂时不要研究这个,等以后再研究这个问题时,就容易理解了。
  • 打赏
  • 举报
回复
hwoarangzk 2010-01-12
当前页面有个jsessionid,10分钟后失效,然后我点回一个html页面.
这个时候jsessionid还是跟失效之前的一样吧?
跳转到html页面不会改变session的吧?
  • 打赏
  • 举报
回复
wydhao123 2010-01-11
  • 打赏
  • 举报
回复
qq77504166 2010-01-11
同意2楼
  • 打赏
  • 举报
回复
config_man 2010-01-11
我先说说我的理解,如果有不正确的地方,希望大家指正。

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题已经答过了。

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

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2010-01-11 07:02
社区公告
暂无公告