Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
1、session
HttpSession session = request.getSession();
session.setAttribute("user", "张三," + new Date());
session.getAttribute("user");
session.removeAttribute("user");
HttpSession具有如下API:
getId 此方法返回唯一的标识,这些标识为每个session而产生。当只有一个单一的值与一个session联合时,或当日志信息与先前的sessions有关时,它被当作键名用。
getCreationTime 返回session被创建的时间。最小单位为千分之一秒。为得到一个对打印输出很有用的值,可将此值传给Dateconstructor 或者GregorianCalendar的方法setTimeInMillis。
getLastAccessedTime 返回session最后被客户发送的时间。最小单位为千分之一秒。
getMaxInactiveInterval 返回总时间(秒),负值表示session永远不会超时。
getAttribute 取一个session相联系的信息。(在jsp1.0中为 getValue)
Integer item = (Integer) session.getAttrobute("item")//检索出session的值并转化为整型
setAttribute 提供一个关键词和一个值。会替换掉任何以前的值。(在jsp1.0中为putValue)
session.setAttribute("ItemValue",itemName);// ItemValue 必须不是must简单类型
//案例:
request.getSession(true); // 如果有session就返回,如果没有session就创建并返回新session
request.getSession(false); // 如果有session就返回,如果没有session就返回null
HttpSession session = request.getSession(); // 等价于
// 设置本session的超时时间,只对本session有效
session.setMaxInactiveInterval(60 * 5);
System.out.println("session.isNew() = " + session.isNew());
System.out.println("session.getCreationTime() = " + session.getCreationTime());
System.out.println("session.getId() = " + session.getId());
System.out.println("session.getLastAccessedTime() = " + session.getLastAccessedTime());
System.out.println("session.getMaxInactiveInterval() = " + session.getMaxInactiveInterval());
session.invalidate(); // 让本session立即失效(过期)
2、cookie
Base64编码
//Encoder编码 Decoder解码
// Base64编码操作
byte[] bytes = "中文".getBytes("utf-8");
String encoding = new BASE64Encoder().encode(bytes);
// Base64解码操作
byte[] bytes2 = new BASE64Decoder().decodeBuffer(encoding);
String str = new String(bytes2, "utf-8");
System.out.println(encoding);
System.out.println(str);
// 添加一个cookie
Cookie cookie = new Cookie("userInfo", "username=abc,password=123");
cookie.setMaxAge(3600 * 24 * 7);
// 设置为正数表示存储到浏览器端,为负数表示不存储,只存在于浏览器的进程,为0表示让浏览删除这个cookie,注意这时要是一样的path才可以。
cookie.setPath("/day08");
// 开头的"/"表示当前整个站点(主机),指定在访问哪个路径时要把这个cookie带过来(包含子孙路径),默认是本Web应的根路径
cookie.setMaxAge(0);
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();//获取cookie
for (Cooke c : cookies) {
i++;
out.write("<h1 style='color:blue'>第" + i + "个cookie的信息:</h1>");
out.write("名称:" + c.getName() + "<br>");
out.write("值:" + c.getValue() + "<br>");
out.write("值2:" + URLDecoder.decode(c.getValue(), "utf-8") + "<br>");
out.write("值3:" + new String(new BASE64Decoder().decodeBuffer(c.getValue()), "utf-8") + "<br>");
}
一些重要方法:
setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。
getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。
setPath(String uri) 指定Cookie适用的路径。
getComment() 返回cookie中注释,如果没有注释的话将返回空值.
getDomain() 返回cookie中Cookie适用的域名. 使用getDomain()方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com)
getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。
getName() 返回Cookie的名字。名字和值是我们始终关心的两个部分。
getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。
getValue() 返回Cookie的值。
getVersion() 返回Cookie所遵从的协议版本。
setComment(String purpose) 设置cookie中注释。
setDomain(String pattern) 设置cookie中Cookie适用的域名
setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。
setValue(String newValue) cookie创建后设置一个新的值。
setVersion(int v) 设置Cookie所遵从的协议版本。
1,存在浏览器端,由浏览来管理(浏览器也可以设置不存储任何cookie)。
2,是键值对格式的数据。
3,全是文本内容。
4,cookie是在响应头中发给浏览器的,是在请求头中发给服务器的。