论坛首页 入门技术论坛

原来servlet中的session不一定会被创建,我居然今天才知道。

浏览 12532 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-11-15  

     以前在树上看session的生命周期,都知道session的生命周期是在客户第一次访问(即打开浏览器输入地址,成功访问)的时候创建。

     同时HttpSessionListener接口(实现的监听器)的sessionCreated方法会被调用。

     等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。


    但是我一直没有想过session是否一定会被创建,这个创建具体是在什么时候,今天写了一段代码。想做个异想天开的实验,就是用户请求的时候再后台创建GUI界面可视化管理前台用户。这时候想到的是用session创建事件管理,但是没想到则么测试也不行,最后查询API发现,session并不是一定被创建。

 

 HttpSession getSession ()
          Returns the current session associated with this request, or if the request does not have a session, creates one.
 HttpSession getSession (boolean create)
          Returns the current HttpSession associated with this request or, if there is no current session and create is true, returns a new session.

    getSession有这两个方法。


    第一个就是默认在没有session的时候新建(new)一个session,第二个方法就是指定布尔型(boolean)确定是否创建session。第二个方法要注意的是。

 

<!-- Generated by javadoc (build 1.6.0_07) on Wed Jun 24 15:16:29 PDT 2009 -->

<noscript></noscript>
HttpSession
 getSession
(boolean create)
Returns the current HttpSession associated with this request or, if there is no current session and create is true, returns a new session.

If create is false and the request has no valid HttpSession , this method returns null .

To make sure the session is properly maintained, you must call this method before the response is committed. If the container is using cookies to maintain session integrity and is asked to create a new session when the response is committed, an IllegalStateException is thrown.

Parameters:
create - true to create a new session for this request if necessary; false to return null if there's no current session
Returns:
the HttpSession associated with this request or null if create is false and the request has no valid session
See Also:
getSession()


粗体字示意说:如果create参数传入false,并且request范围内没有 HttpSession对象,则此方法会返回null





由此看来,必须在调用getSession() 的时候才能创建session否则默认是不存在session的。


呵呵,有什么不对的地方大家请指出,谢谢了。
   发表时间:2011-11-16  
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?



0 请登录后投票
   发表时间:2011-11-16   最后修改:2011-11-16
浏览器第一次访问一个网站的时候,服务器就分配了一个Session ID给浏览器。这时候,Session已经通过Session ID建立了。分配了Session ID不等于分配了存储空间。
servlet中的getSession() API是用来获取服务端Session存储空间的。这个存储空间(一般用来存放用户名和角色等认证信息)只有在用到的时候才会分配。
服务器重启,Session肯定会被销毁的。不过,Session销毁的情况一般都是因为Time Out(过期)。用户长期不反应,Session ID就会过期。对应的Session存储空间也会释放。

关于HTTP Session和cookie,我写了一些相关篇章。希望能有帮助。

《编程机制探析》第二十三章 HTTP
http://www.iteye.com/topic/1116710
3 请登录后投票
   发表时间:2011-11-16  
goldenfish1919 写道
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?




yes
0 请登录后投票
   发表时间:2011-11-16  
Technoboy 写道
goldenfish1919 写道
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?




yes


浏览器关闭并不会将session关闭,而是浏览器丢失了sessionID,这是一种存放在内存中的临时cookie
而服务器并不关心用户浏览器是否关闭,只是查看每次请求中是否包含sessionID,
如果长期不适用,那么session过期,销毁!
1 请登录后投票
   发表时间:2011-11-16  
Technoboy 写道
goldenfish1919 写道
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?




yes


    这是常识吧 少年
0 请登录后投票
   发表时间:2011-11-16  
Technoboy 写道
goldenfish1919 写道
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?




yes


yes个JB毛啊,你还yes,你看看楼下是怎么说得!
0 请登录后投票
   发表时间:2011-11-16  
northc 写道
Technoboy 写道
goldenfish1919 写道
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?




yes


    这是常识吧 少年


你可以拿无知当常识!
0 请登录后投票
   发表时间:2011-11-16  
那本书上写第一次访问就会创建,我看的怎么没有
0 请登录后投票
   发表时间:2011-11-16  
northc 写道
Technoboy 写道
goldenfish1919 写道
等到用户关闭浏览器,或者服务器重启的时候session被关闭,并且HttpSessionListener接口的sessionDestroyed方法会被调用。

are you sure?




yes


    这是常识吧 少年



session是服务端的,浏览器是客户端的,你的浏览器关闭和session没有关系的,session失效基本上是三种情况

1、超时
2、手动的注销
3、服务器重启
1 请登录后投票
论坛首页 入门技术版

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