Session超时管理
Session接口的方法
HttpSession接口的session方法
application与session域范围的属性比较
利用Cookie实现session跟踪
利用url重写实现session跟踪
1.什么是Session?
Session技术是一种将会话技术状态保存在服务器端的技术,它可以比喻成是医院发给病人的病历卡的医院为每个病人保留的病例档案的结合方式
。
客户端需要接受,记忆和回送Session的会话表示号,Session可以且通常是借助cookie来传递会话标识号
2.浏览器请求----->web服务器某个servlet程序,会话开始,一个唯一的标示id 保存会话状
态存储区域。
浏览器(id)<---------id
浏览器------id------>servlet
3.web服务器不会再客户端开始访问的它时就创建HttpSession对象只有访问某个servlet程序与客户端开启会话是,wen应用程序此安徽创建一个
与该客户端所对应的Session对象
4.web服务器为HttpSession对象分配了一个独一无二的会话标识号,然后在响应消息中将这个会话表示号传递给客户端。每次客户端都应该提交
标识号,从而服务器端选择与之对应的HttpSession
(1) 使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,还可以
使用方法getSession(true)
(2) 写session变量。可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。也可以使用
HttpSession.putValue(name,value),但这个方法已经过时了。
(3)读Session变量。可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量
,那么返回的是null。需要注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换,比如:
String uid = (String) session.getAttribute("uid");
也可以使用HttpSession.getValue(name),但是这个方法也已经过时了。
(4) 关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,Servlet
引擎在一段时间之后,自动关闭seesion。
下面举一个简单的例子说明session的使用
//97色色 SessionExample.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
//导入必要的软件包
public class SessionExample extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException //实现doGet方法
{
response.setContentType("text/html"); //设置HTTP头
PrintWriter out = response.getWriter(); //得到输出97gan
HttpSession session = request.getSession(true);
//得到session对象
//打印HTML标记
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");
out.println("</head>");
out.println("<body>");
Date created = new Date(session.getCreationTime());
//得到session对象创建的时间
Date accessed = new Date(session.getLastAccessedTime());
//得到最后访问该session对象的时间
out.println("ID " + session.getId()+"<br>");
//得到该session的id,并打印
out.println("Created: " + created+"<br>");
//打印session创建时间
out.println("Last Accessed: " + accessed+"<br>");
//打印最后访问时间
session.setAttribute("UID","12345678");
//在session中添加变量UID=12345678
session.setAttribute("Name","Tom");
//在session中添加变量Name=Tom
Enumeration e = session.getAttributeNames();
//得到session中变量名的枚举对象
while (e.hasMoreElements()) { //遍历每一个变量
String name = (String)e.nextElement(); //首先得到名字
String value = session.getAttribute(name).toString();
//由名字从97gan中得到值
out.println(name + " = " + value+"<br>"); //打印
}
out.println("</body>"); //打印HTML标记
out.println("</html>");
}
}
}