例如:在线购物时,在不同的页面间进行切换刷新浏览商品、添加购物车、在线结算,需要知道每次发送请求的是同一名用户
1:返回的是以长整型为单位的毫秒数
2:通过这唯一ID来识别当前会话
3、4是对应的
举例(用Eclipse Jee)
新建SessionTest01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> 欢迎学习session内置对象</h1>
Session创建时间:<%= session.getCreationTime() %> <br>
</body>
</html>
运行结果:
这样子看不太直观,以下做一个简单的格式化
导入包java.util.*,java.text.*
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> 欢迎学习session内置对象</h1>
<% SimpleDateFormat sdf=new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");
Date d=new Date(session.getCreationTime());
%>
Session创建时间:<%= sdf.format(d) %> <br>
</body>
</html>
再看看session另两个方法的使用
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> 欢迎学习Session内置对象</h1>
<% SimpleDateFormat sdf=new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");
Date d=new Date(session.getCreationTime());
session.setAttribute("usename","fy");
%>
Session创建时间:<%= sdf.format(d) %> <br>
Session中获取的用户名:<%=session.getAttribute("usename") %> <br>
Session的ID编号:<%= session.getId() %>
</body>
</html>
可以通过session.getId()读到JSP给分配的session分配的ID编号,也可以通过session.setAttribute给某一个变量名赋值,然后通过session.getAttribute把变量名赋值读取出来
同一用户在不同页面切换时,靠session分配的ID编号来辨别是否是同一个用户
证明:
加一个超链接,希望通过这个超链接连接到一个新页面,如果在新页面中用session读到的ID和在SessionTest01.jsp用session读到的ID一致,就可以证明,同一个用户在不同页面进行跳转时,可以用sessionID是否为同一个来辨别是否是同一个用户
SessionTest01.jsp改为
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> 欢迎学习Session内置对象</h1>
<% SimpleDateFormat sdf=new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");
Date d=new Date(session.getCreationTime());
session.setAttribute("usename","fy");
%>
Session创建时间:<%= sdf.format(d) %> <br>
Session中获取的用户名:<%=session.getAttribute("usename") %> <br>
Session的ID编号:<%= session.getId() %> <br>
<a href="SessionTest02.jsp"> 跳转到SessionTest02.jsp</a>
</body>
</html>
新建SessionTest02.jsp
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> 欢迎学习Session内置对象</h1>
Session中获取的用户名:<%=session.getAttribute("usename") %> <br>
Session的ID编号:<%= session.getId() %> <br>
</body>
</html>
运行SessionTest01.jsp
点击跳转
ID一致
从session对象被创建,就是一个会话开始,当一个客户访问服务器的时候,在多个页面之间进行切换,服务器通过session对象来确定是同一个用户。这个会话的持续期间,就是session的持续期间。session也有生命周期。当把所有的浏览器页面关闭时,当前所创建的session对象就结束了,只要还有一个页面停留,当前session对象还会持续。
举例设定发呆时间:
在"fy"下一行添加
session.setMaxInactiveInterval(5);
这里设定的发呆时间是5秒,5秒不操作,再跳转到02时,已经不是原来01的session
用户名为null,说明01中的session对象已经消失了,已经没办法获取从01传递过来的用户名
session消失的方法:
1、关闭所有页面
2、通过invalidate()方法
3、通过设置发呆时间