session对象
- session对象是一个JSP内置对象。
- session对象在第一个JSP页面被装载时自动创建,完成回话期管理。
- session生命周期从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束被称为一个会话。
- 当一个客户访问一个服务器时,可能在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
- session对象时HttpSession类的实例。
session的工作原理如下:
- 客户首次访问服务器的一个页面时,服务器就会为该用户分配一个session对象,同时为这个session指定唯一的ID,并且将该ID发送到客户端并写入到cookie中,使得客户端与服务器的session建立一一对应的关系。
- 当客户端继续访问服务器端的其它资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。
- 当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。
session对象常用方法:
- long getCreationTime() : 返回SESSION创建时间。
- public String getId() : 返回SESSION创建时JSP引擎为它设的唯一ID号
- public Object setAttribute(String name,Object value):使用指定名称将对象绑定到此会话。
- public Object getAttribute(String name):返回与此会话中的指定名称绑定一起的对象,如果没有对象绑定在该名称下,则返回null
- String [] getValueNames():返回一个包含此SESSION中所有可用属性的数组
- int getMaxInactiveInterval():返回两次请求间隔多久时间此SESSION被取消(单位秒)
session.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<%@page import="java.util.*" %> <%@page import="java.text.SimpleDateFormat"%> <%@ page language="java" contentType="text/html; pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>session内置对象</title> </head> <body> <h1>session 内置对象</h1> <hr> <% SimpleDateFormat time=new SimpleDateFormat("YYY:MM:dd Date d=new Date(session.getCreationTime()); session.setAttribute("username", "wangzheng"); %> 会话创建时间:<%=time.format(d) %><br> 会话的ID编号:<%=session.getId() %><br> 会话中获取用户名:<%=session.getAttribute("username") %><br> <a href="session2.jsp" target="_blank">跳转到session2.jsp,测试会话</a> </body> </html> |
session2.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<%@page import="java.util.*" %> <%@page import="java.text.SimpleDateFormat"%> <%@ page language="java" contentType="text/html; pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; <title>session内置对象</title> </head> <body> <h1>session 内置对象</h1> <hr> <% SimpleDateFormat time=new SimpleDateFormat("YYY:MM:dd Date d=new Date(session.getCreationTime()); %> session创建时间:<%=time.format(d) %><br> session的ID编号:<%=session.getId() %><br> session中获取用户名:<%=session.getAttribute("username") %><br> </body> </html> |
结果分析:session.jsp和session2.jsp中session ID一样,session2.jsp获取到了session.jsp中的用户名。说明两个页面在同一会话中。
//设置当前session最大生成期限单位为秒。
<%
session.setMaxInactiveInterval(10);
%>
//getValueNames()获取session中保存的属性。
session中保存的属性有:<%
String [] names=session.getValueNames();
for(String s:names)
{
out.println(s+” ”);
}
%>
Session生命周期
- 创建:
- 当客户端第一次访问某个Servlet时候,服务器会为当前会话创建一个Session Id,每次客户端向服务器发送请求时,都会将此Session Id携带过去,服务端会对此Session Id进行校验。
- 活动:
- 某次会话中通过超链接打开的新页面属于同一次会话。
- 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
- 除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
- 销毁:(3种方法)
- 1.调用session.invalidate()方法
- 2.Session过期(超时)
- 3.服务器重新启动。
转载请注明来自bcoder.cn网站所有,本文地址:http://www.bcoder.cn/?p=878
除非注明,Bcoder文章均为原创,转载请注明出处和链接!
版权声明:本文为博主原创文章,未经博主允许不得转载。