- Cookie
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
- Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
当用户第一次访问服务器的时候,这时候在request对象里是没有携带cookie信息的,当访问了服务器之后,服务器就会往客户端写一个唯一标识的cookie,
当用户在第二次访问服务器的时候,这时request对象就会携带上次的cookie信息进行访问服务器,因为cookie有个唯一标识的ID号,所以,之前的信息不丢失。
记录用户上次访问时间的例子:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 判断是否存在cookie 信息
Cookie[] cookies = request.getCookies(); // 获得所有cookie信息
// 在cookies 数组中查找指定名称cookie
Cookie lastVisitCookie = findCookie(cookies, "lastvisit");
if (lastVisitCookie == null) {
// 不存在上次访问时间
response.setContentType("text/html;charset=utf-8");
response.getWriter().println("欢迎第一次访问XXX网站!");
} else {
// 存在上次访问时间
long lastvisittimes = Long.parseLong(lastVisitCookie.getValue()); // 假设保存时间是毫秒
response.setContentType("text/html;charset=utf-8");
response.getWriter().println(
"您上次的访问时间是:" + new Date(lastvisittimes).toLocaleString());
}
// 向客户端写回最新访问时间
Cookie newLastVisitCookie = new Cookie("lastvisit", System
.currentTimeMillis()
+ "");
newLastVisitCookie.setMaxAge(60 * 60);// 保存cookie 1小时
newLastVisitCookie.setPath("/");
response.addCookie(newLastVisitCookie);
}
// Cookie格式========== Cookie: name=value,name=value,name=value
// 客户端对于同一个网站会存在很多个cookie
private Cookie findCookie(Cookie[] cookies, String name) {
if (cookies == null) {
// 不存在任何cookie
return null;
} else {
// 存在cookie,查找指定cookie
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
// 找到了
return cookie;
}
}
// 没有找到
return null;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
第一次访问这个servlet 程序的时候,因为reqeust对象中没有携带cookie信息。所以页面显示的是 ----”
欢迎第一次访问XXX网站!“