Session
HTTP协议是”无状态“性的,客户端每次请求都会独立的连接到Web服务器,服务器不保留之前的请求记录。
需要保留Session会话有一下三种方式:
Cookie
服务器可以分配唯一Session id 作为客户端的Cookie,对于客户端的后续请求可以使用接受到的Cookie来识别,但是有很多浏览器不支持Cookie,所有此方法不一定有效,不建议使用此方法来维持Session会话。
隐藏表单字段
Web服务器可以发送一个隐式的HTML表单字段,以及唯一Session Id:
<input type="hidden" name = "sessionid" value = ".......">
当表单被提交时,指定的键值对会包含在GET/POST的数据流中。每次客户端请求时,session_id值可以用于保持不同的客户端的跟踪。但是此方法只可以用于有表单提交的请求,对于点击超文本链接
Session 实例
// 若Session不存在,创建一个Session对象
HttpSession session = request.getSession(true);
// 获取Session的创建时间
Date createTime = new Date(session.getCreationTime());
// 获取最近一次访问时间
Date lastAccessTime = new Date(session.getLastAccessedTime());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int visitCount = 0;
String visitCountKey = "visitCount";
String userIDKey = "userId";
String userID = "yoyoyo"+(int)(Math.random() *100);
// 检查是否有新的访问者
if (session.isNew()) {
session.setAttribute(userIDKey, userID);
} else {
visitCount = (int) session.getAttribute(visitCountKey);
visitCount += 1;
userID = (String) session.getAttribute(userIDKey);
}
session.setAttribute(visitCountKey, visitCount);
System.out.println(userIDKey + ":" + userID);
System.out.println(visitCountKey + ":" + visitCount);
System.out.println("CreateTime" + ":" + format.format(createTime));
System.out.println("LastAccessTime" + ":" + format.format(lastAccessTime));
//设置一个条件,用来删除Session
if ((int) session.getAttribute(visitCountKey) > 5) {
session.invalidate();
}
删除Session数据
五种方式可以删除Session数据:
removeAttribute(String name) 删除指定的属性。
invalidate() 删除整个Session。
设置Session过期时间 setMaxInactiveInterval(int interval)。
支持Servlet2.4的客户端 调用HttpSession.logout() 注销客户,将用户的所有Session置为无效。
在Tomcat服务器上,可以再web.xml中设置超时时间:
<session-config> <!-- 单位为分--> <!-- 可以通过调用HttpSession中的getMaxInactiveInterval()获取,单位为秒 --> <session-timeout>5</session-timeout> </session-config>
Session和Cookie的区别
session 在服务器端 ,cookie 在客户端(浏览器)
session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。
- 而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 session 的一种实现。
博客内容参考于:http://www.runoob.com/servlet/servlet-session-tracking.html 等