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是在响应头中发给浏览器的,是在请求头中发给服务器的。