JiveJdon Community Forums
在线88人 Home | 论坛 | 培训咨询 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 60 回复 / 5 页 [ 1 2 3 4 5 下一页 ]  发表新帖子  回复该主题贴
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
给他发消息
关闭浏览器之后session是否就消失了??? 发表: 2003年07月15日 15:06 回复
我的服务中有一个用户注册网页,注册后向servlet发送post请求,然后servlet建立session,设置一些用户访问属性。
当用户以后再次访问服务的时候,我希望服务能够识别出客户,找出以前建立的session,然后读取它的属性。

实际效果是,如果我不关闭浏览器,以后再次访问时服务能够找出以前建立的session,就是说,它还认识我。但是如果我关闭了浏览器,以后再次访问时服务会建立一个新的session,导致读取属性时抛出NullPointerException,也就是说,它已经不再认识我了。

可是许多网站,只要你注册过一次,以后你怎么访问它都能认出你!我应该怎么做呢?

我把压缩包放在这里,请大家帮我看看,谢谢!
wwlhp@jdon.comY5y7NrbB7C.rar
bruce

发表文章: 191
注册时间: 2003年05月28日 09:53
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月15日 21:33 回复
请设定session的存活期,否则系统Mo 认关闭browser后,session die
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月16日 08:51 回复
session.setMaxInactiveInterval(-1);
我设定的session永久不会timeout! 可还是不管用!
AreYouOK?

发表文章: 77
注册时间: 2003年03月31日 18:28
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月16日 09:53 回复
服务器端并不能捕获客户端的浏览器关闭事件,因此你关闭浏览器以后,服务器端那个Session还是存在的,要超时以后才被回收,启动一个新的浏览器会启动一个新的session,所以他不认你了
session永不过期是愚蠢透顶的做法,session将只增不减,你有多少内存?

自动登录都是用Cookie实现的,登录后给客户端一个Cookie,以后浏览器每次都发送发送那个Cookie给服务器端,然后实现自动登录

》》可是许多网站,只要你注册过一次,以后你怎么访问它都能认出你!我应该怎么做呢?
你把浏览器的Cookie都清除掉,看他下次还认识你不?

实际上session通常也是通过Cookie实现的
AreYouOK?

发表文章: 77
注册时间: 2003年03月31日 18:28
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月16日 09:59 回复
session靠Cookie来维持,每次给客户端一个cookie里面存放session id,然后请求的时候,服务器根据session id找到对应的session。这个cookie是在浏览器关闭的时候就实效的,自动登录的cookie需要设置成为关闭浏览器后还有效的那种。
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月16日 16:13 回复
谢谢Ar**ouOK!
不过我还有句话不理解,你说“session永不过期是愚蠢透顶的做法,session将只增不减,你有多少内存?”,能给我仔细解释一下么?

我觉得像自动登陆的这类网站,它给客户发送cookie的同时,在服务器端也是要保留一小片跟cookie对应的数据,而且这些数据也是要永驻服务器端的,对吧?那么随着客户的增加,这些数据也会积累的非常巨大。
KillerMan

发表文章: 154
注册时间: 2008年02月27日 18:33
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月16日 23:30 回复
每一个session是通过自己的session id来识别的。

session id在 浏览器打开的时候是自动通过cookie在各个网页内通信的。
如果你关掉浏览器,这个cookie过期,所以下次你找不到上次的session 了。
将每个用户的session id存到数据库中,在用户登陆时,先取出这个session id ,根据这个session id 取session,如果session不为空,就直接使用这个session,跳过登陆过程,否则需要重新登陆一次。


session id 通过get或者head标头传送,这样即使客户端浏览器禁止了cookie 你还可以使用session。否则,cookie禁止,session机制就失效了。
KillerMan

发表文章: 154
注册时间: 2008年02月27日 18:33
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月16日 23:31 回复
Ar**ouOK? 的说法有一点是错误的。
session是存储在硬盘上的。和内存的关系不大
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月17日 08:47 回复
那么我想再请教一点,在用户首次注册之后,服务器端的servlet我认为应该是这样子的:
1〉// 从request的参数中读取用户名和密码
2〉request.getSession(true);
3〉// 把session、用户名和密码存入数据库
4〉// 生成欢迎页面

我想知道在用户端的session id是如何从服务器端发送过去的,我觉得应该是在第4步,sinio_feng你觉得对么?

还有,sinio_feng说客户端的session id是通过get、post标头而不是cookie发送到服务器端的。我想知道这应该怎么实现?是URL重写么?
AreYouOK?

发表文章: 77
注册时间: 2003年03月31日 18:28
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月17日 10:48 回复
》》Session是存在硬盘上的?
因为HTTP是无状态的协议,客户端关闭浏览器不能在服务器端捕获,所以为了维持客户状态,浏览器第一次访问服务器的时候服务器会在服务器端(用Session.setAttribute(X)设置的Session上的数据是在服务器端内存里面的)创建一个Session(如果你指定这个页面是无状态的就不会,一般很少这样做),并把Session id 发送给客户端,通常是装在一个只要关闭浏览器就失效的Cookie中发送给浏览器,所以有时候客户端禁用Cookie可能就会有问题。

如果服务器端的Session不销毁的话就会越来越多,直到内存资源耗尽,所以服务器会在每次请求到达的时候更新对应session的上次活动的时间,Session长时间不活动(比如20分钟)服务器端要销毁这个session。长时间不活动就会注销这种情况的原因就是这样的。

注意到没有,如果客户端浏览器关闭,服务器端的session仍然存在直到超时为止,你新开一个浏览器又是一个新session(从一个浏览器中的超链接打开的新浏览器窗口与原来的共享session)。。在访问量大的情况下,这些session占用的内存是很可观的,将session的超时时间设置的很短可以节约内存,还有一个原则就是不要把什么东西都放到session上,不用的session变量马上remove掉。

在基于Struts应用中session id是通过一个叫jsessionid的变量用get递的,你可以在浏览器的地址栏里看到

以上这些session的维持工作都是服务器做的,通常不需要你来参与。如果要实现自动登录这样的功能才需要自己做cookie

有的网站不关闭浏览器永不超时是做了特殊处理的,实际上请求发送过去如果session超时了,他们是通过某种机制实现自动登录。比如保存cookie,也有将用户名和密码随着每次请求发送的。
AreYouOK?

发表文章: 77
注册时间: 2003年03月31日 18:28
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月17日 11:03 回复
简单做法是每次登录以后把用户id装在cookie里传给客户端,再把用户id放在session上。以后每次操作需要取用户id时先到session里面取,如果不存在(可能是超时或没有登录)就到随着请求发送过来的cookie里面找

注意这样做是不太安全的
AreYouOK?

发表文章: 77
注册时间: 2003年03月31日 18:28
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月17日 11:05 回复
》》如果不存在(可能是超时或没有登录)就到随着请求发送过来的cookie里面找

如果cookie里没有找到,那么没有登录
raynix

发表文章: 170
注册时间: 2003年06月17日 11:34
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月17日 13:03 回复
ar**ouok 说得对.
KillerMan

发表文章: 154
注册时间: 2008年02月27日 18:33
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月17日 16:53 回复
正在使用地session是在内存中地,已不再使用,但没有过期地session是存放在硬盘地指定目录地。并且正在使用地session也有缓存到硬盘上地。
理论地争论没有意义。
apache地临时目录中去找一下session文件到处都是。
其实想一下就明白,如果一个web服务器在session地处理上那么弱智会内存耗尽地话,也不用在市场地混了。
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
给他发消息
Re: 关闭浏览器之后session是否就消失了??? 发表: 2003年07月18日 08:33 回复
我觉得sinio_feng说的有道理。
这个主题有 60 回复 / 5 页 [ 1 2 3 4 5 下一页 ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam