session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
常用方法:
Object getAttribute(String name) //获取指定名字的属性
Enumeration getAttributeName() //获取 session 中全部属性的名字,一个枚举
long getCreationTime() //返回 session 的创建时间,单位:毫秒
String getld() //返回创建 session 时 JSP 引擎为它设置的唯一 ID 号
long getLastAccessedTime() //返回此 session 中客户端最近一次请求的时间,单位是毫秒。使用这个方法,可以判断某个用户在站点上一共停留了多长时间
int getMaxInactiveInterval() //返回两次请求间隔多长时间 session 被销毁(单位:秒)
void setMaxlnactivelnterval(int interval) //设置两次请求间隔多长时间 session 被销毁(单位:秒)
void invalidate() //销毁 session 对象
boolean isNew() //判断请求是否会产生新的 session 对象
void removeAttribute(String name) //删除指定名字的属性
void setAttribute(String name,String value) //设定指定名字的属性值
创建及获取客户会话属性:
JSP 页面可以将任何对象作为属性来保存。使用 setAttribute() 方法设置指定名称的属性,并将其存储在 session 对象中,使用 getAttribute() 方法获取与指定名字 name 相联系的属性。
语法格式如下:
session.setAttribute(String name,String value); //参数name为属性名称,value为属性值
session.getAttribute(String name); //参数 name 为属性名称
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>创建及获取客户会话属性</title>
</head>
<body>
session的创建时间:<%=new Date(session.getCreationTime()).toString() %><br>
session的ID: <%=session.getId() %><br><hr>
当前时间:<%=new Date().toString( ) %> <br>
该 session 是新创建的吗?:<%=session.isNew()?"是":"否" %> <br> <hr>
当前时间:<%=new Date().toString( ) %> <br>
</body>
</html>
从会话中移除指定的对象:
JSP 页面可以将任何已经保存的对象部分或者全部移除。
使用removeAttribute() 方法,将指定名称的对象移除,也就是说,从这个会话删除与指定名称绑定的对象。使用 invalidate() 方法,可以将会话中的全部内容删除。
语法格式如下:
session.removeAttribute(String name); //参数name为session对象的属性名,代表要移除的对象名
session.invalidate(); //把保存的所有对象全部删除
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session的创建时间:<%=new Date(session.getCreationTime()).toString() %><br>
session的ID: <%=session.getId() %><br><hr>
当前时间:<%=new Date().toString( ) %> <br>
该 session 是新创建的吗?:<%=session.isNew()?"是":"否" %> <br> <hr>
当前时间:<%=new Date().toString( ) %> <br><br><hr>
<%
session.removeAttribute("info");
if(session.getAttribute("info")==null)
{
out.println("session 对象 info 已经不存在");
}
else
{
out.println(session.getAttribute("info"));
}
%>
</body>
</html>
设置会话时限:
当某一客户与 Web 应用程序之间处于非活动状态时,并不以显式的方式通知服务器,所以,在 Servlet 程序或 JSP 文件中,做超时设置是确保客户会话终止的唯一方法。
Servlet 程序容器设置一个超时时长,当客户非活动的时间超出时长的大小时,JSP 容器将使 session 对象无效,并撤销所有属性的绑定,这样,就清除了客户申请的资源,从而实现了会话生命周期的管理。
session 用于管理会话生命周期的方法有 getLastAccessedTime()、getMaxInactiveInterval() 和 setMaxInactiveInterval(int interval)。
session.getMaxInactiveInterval() //对象默认的有效时间
session.setMaxInactiveInterval(60*5) //设置session的有效时间为5分钟
session.getMaxInactiveInterval() //修改有效时间
购物车例题:
<%@ 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>
<form action="shop.jsp" method="post">
<p>各种球类大甩卖</p>
<p>
<input type="checkbox" name="ball" value="篮球">篮球
<input type="checkbox" name="ball" value="足球">足球
<input type="checkbox" name="ball" value="乒乓球">乒乓球
</p>
<p>
<input type="submit"value="确认">
<a href="meat.jsp">买点别的</a>
<a href="shop.jsp">购物车</a>
</p>
<%
request.setCharacterEncoding("utf-8");
String b[]= request.getParameterValues("meat");
if(b!=null)
session.setAttribute("b",b);
%>
</form>
</body>
</html>