session表示客户端与服务器的一次会话。web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间,从定义中可以看到,session实际上是一个特定的时间概念。

       我们通过代码来了解session中的一些常用的方法:

创建一个jsp文件,就明名为  session_page1.jsp 

<span style="font-size:18px;"><body>
    <h1>session内置对象</h1>
    <hr>
    <% 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//设置日期格式
      Date d = new Date(session.getCreationTime());// session的创建时间
      
      session.setAttribute("username", "admin");  //使用指定名称将对象绑定到此会话 相当于键值是“username” 值是“admin”
      session.setAttribute("password", "123456");
      session.setAttribute("age", 20);
      
      //设置当前session最大生成期限单位是秒
      //session.setMaxInactiveInterval(10);//10秒钟
      
    %>
    Session创建时间:<%=sdf.format(d)%><br>    
    Session的ID编号:<%=session.getId()%><BR>            //返回session创建时JSP引擎为它设的唯一ID号
         从Session中获取用户名:<%=session.getAttribute("username") %><br></span>
在body里面 我们调用了

                                         session.getCreationTime()方法,其作用是获取session的创建时间

                                         session.getId()f方法,返回session创建时JSP引擎为它设的唯一ID号

                                         session.setAttribute("username", "admin")使用指定名称将对象绑定到此会话 相当于键值是“username” 值是“admin”

                                         session.getAttribute("username") 方法是从Session中获取用户名

测试结果为:

Session创建时间:2015年08月31日 23:26:24
Session的ID编号:C42C36F8ADD3D795CFB268E00B5BA288
Session中获取用户名:admin


我们再次创建session_page2.jsp

首先我们再session_page1.jsp中写一个超链接 ,在body中添加

<a href="session_page2.jsp" target="_blank">跳转到Session_page2.jsp</a> 

然后在session_page2.jsp中body中写入如下代码:

<span style="font-size:18px;"><body>
    <h1>session内置对象</h1>
    <hr>
   
   
    Session的ID编号:<%=session.getId()%><BR>
    从Session中获取用户名:<%=session.getAttribute("username") %><br>
    Session中保存的属性有:<% 
                     String[] names =session.getValueNames();//返回此session可用属性的数组
                     for(int i=0;i<names.length;i++)
                     {
                        out.println(names[i]+"  ");
                     }
    
    %> <br>    
  </body></span>

       在上述代码中我们再次使用了   session.getId()f方法,获取到session唯一ID值,

也用session.getAttribute("username") 方法获取用户名


        刷新session_page1.jsp页面 点击超链接,跳转到session_page2.jsp

可以看到测试结果为:

Session的ID编号:C42C36F8ADD3D795CFB268E00B5BA288
从Session中获取用户名:admin
Session中保存的属性有:password   age   username   


    说明在浏览器没有关闭之前,session 是用一个值,说明是同一个会话。

另外代码中的session.getValueNames()方法返回此session可用属性的数组,从测试结果中可以看到打印的属性。


    还有一个方法:

设置当前session最大生成期限,单位是秒
session.setMaxInactiveInterval(10);//表示超过10秒钟
后,session会销毁

当在session_page1.jsp中写入这个代码后,得到Session的ID编号:C42C36F8ADD3D795CFB268E00B5BA288

停留10秒钟后,点击超链接,到session_page2.jsp得到Session的ID编号85AE163BD29303B2B906823C310C99D7

说明创建了一个新的session。并且不能再获取到session中的属性,测试如下:

从Session中获取用户名:null
Session中保存的属性有: 


session的生命周期:

1.通过超链接打开的页面属于同一次会话。

2.只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时,属于同一次会话。

3.本次会话的所有页面全都关闭的情况下,再重新访问某个JSp或Servlet时会创建新的会话(注意:原有的会话仍存在,但只是这个旧的sessionId仍存在于服务端,但再也没有客户端会携带它然后交予服务器端校验)


销毁:

session.invalidate();

设置超时时间,默认30分钟