论坛首页 Java企业应用论坛

httpsession 详细内容整理

浏览 18044 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-03-16  
有些懂,有些还是不懂
0 请登录后投票
   发表时间:2011-03-16  
有学习了很多
0 请登录后投票
   发表时间:2011-03-16  
引用
解决方法: 当发现通过sessionid从url指定时, 创建一个新的session,将旧session的信息复制到 新sessoin中,然后将新session注销。就能防止上面那种情况了。

然后将新的session注销?!
0 请登录后投票
   发表时间:2011-03-16  
accphc 写道
引用
解决方法: 当发现通过sessionid从url指定时, 创建一个新的session,将旧session的信息复制到 新sessoin中,然后将新session注销。就能防止上面那种情况了。

然后将新的session注销?!

笔误     将旧的session注销
0 请登录后投票
   发表时间:2011-03-16  
feiyan35488 写道
qianshuiqs 写道
这个确实不错,但我还有一个问题,这个保存sessionId和username中的map必然是个全局对象,这个全局对象保存到哪里,还有之前说就算浏览器关闭了session也不会消失,那么如何从map中清理无用的session.

这个map可以保存到 servletContext中。清理session的时候,需要注册session的listener,有session销毁的操作时,就可以清除了。当对方关闭浏览器时,只能等session到期自动销毁。这就需要将session的最大请求间隔时间设计的合理一些

这个Map 要不要做成static的?
0 请登录后投票
   发表时间:2011-03-16  
Aaron_Zhang 写道
feiyan35488 写道
qianshuiqs 写道
这个确实不错,但我还有一个问题,这个保存sessionId和username中的map必然是个全局对象,这个全局对象保存到哪里,还有之前说就算浏览器关闭了session也不会消失,那么如何从map中清理无用的session.

这个map可以保存到 servletContext中。清理session的时候,需要注册session的listener,有session销毁的操作时,就可以清除了。当对方关闭浏览器时,只能等session到期自动销毁。这就需要将session的最大请求间隔时间设计的合理一些

这个Map 要不要做成static的?

这个不用,放到servletContext中就可以了,用不到设计成static,否则需要用线程安全的map,这样查询和插入很浪费性能的
0 请登录后投票
   发表时间:2011-03-18  
好贴,session and cookie alwasy confused me.
0 请登录后投票
   发表时间:2011-03-22  
引用

    1,浏览器禁用cookie
      这就没办法保存sessionid了,可以采用url重写,转发,加隐藏字段等方法来将sessionid传给服务器。
     如:  baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf?asdfasdf
             baidu.com?jsessionid=asdfasdfasdfadsfad&&adfdf
这根据服务器的不同实现,第一种可以将普通参数区分开。


纠正
baidu.com;jsessionid=adfasdfasdfasdfasdfafdadf
而不是
baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf

";"表示jsessionid作为uri请求的一部分信息
"?"不应该作为请求参数的一部分传递到服务端

0 请登录后投票
   发表时间:2011-03-22  
akunamotata 写道
引用

    1,浏览器禁用cookie
      这就没办法保存sessionid了,可以采用url重写,转发,加隐藏字段等方法来将sessionid传给服务器。
     如:  baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf?asdfasdf
             baidu.com?jsessionid=asdfasdfasdfadsfad&&adfdf
这根据服务器的不同实现,第一种可以将普通参数区分开。


纠正
baidu.com;jsessionid=adfasdfasdfasdfasdfafdadf
而不是
baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf

";"表示jsessionid作为uri请求的一部分信息
"?"不应该作为请求参数的一部分传递到服务端


嗯 对。
0 请登录后投票
   发表时间:2011-03-23  
feiyan35488 写道
Aaron_Zhang 写道
feiyan35488 写道
qianshuiqs 写道
这个确实不错,但我还有一个问题,这个保存sessionId和username中的map必然是个全局对象,这个全局对象保存到哪里,还有之前说就算浏览器关闭了session也不会消失,那么如何从map中清理无用的session.

这个map可以保存到 servletContext中。清理session的时候,需要注册session的listener,有session销毁的操作时,就可以清除了。当对方关闭浏览器时,只能等session到期自动销毁。这就需要将session的最大请求间隔时间设计的合理一些

这个Map 要不要做成static的?

这个不用,放到servletContext中就可以了,用不到设计成static,否则需要用线程安全的map,这样查询和插入很浪费性能的


ServletContext是Servlet的上下文环境类,为什么要放到这里?
HttpSessionListener和HttpSessionActivationListener是监听Session对象的创建和销毁。当创建一个Session时,激发HttpSessionListener中的session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发HttpSessionListener中的sessionDestroyed (HttpSessionEvent se)方法。
所以说应该放到HttpSessionListener中。(用子类去实现这个接口,然后通过HttpSessionEvent.getSession().getId()去获得sessionId)

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics