Cookie是什么
Cookie是客户端技术,服务器将每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
在HTTP中他表示服务器送给客户端的小甜点,其实Cookie就是一个键和一个值构成的。随着服务器端的响应发送给客户端浏览器,然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
Cookie是服务器创建,然后通过响应发送给客户端的一个键值对,客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie),当客户端向服务器发出请求时,会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了的。
Cookie的常用方法
创建Cookie
Cookie(String,String)
Cookie方法
getName
getValue
setMaxAge
存取Cookie
通过请求取 getCookies
通过响应存 addCookie
Cookie的获取和设置
Java中有一个专门的java.servlet.http.cookie类,可以通过操作该类来进行cookie的获取和设置,Cookie可以通过request.getCookie()来获取,获得的是一个cookie数组,同时通过response.addCookie(cooki)向客户端浏览器设置cookie
cookie的有效期,修改和删除。
有效期
Cookie有效期的设置方法为:Cookie.setMaxAge(maxAge);
maxAge设置的时间即为cookie的有效期。一般以秒为单位。
比如设置的时间为60,那么cookie的有效期为60秒。不随浏览器的关闭而消失。
加入关闭浏览器又重新打开,那么此时若还没有到60秒,这个时候可以获取该cookie。
加入maxAge设置为-1,此时cookie的有效期随浏览器的关闭而清除。
修改
通过方法重新设置一次cookie,就是cookie的修改。但是除了cookievalue,和maxage其它配置不能修改,否则,cookie为不同的cookie。
Response.addCookie(cookie);
cookie的删除
将cookie的有效期设置为0.
cookie的安全属性
设置cookie时,将cooKie的Secure属性设置为true;
通过将设置cookie的setSecure(true);
案例:显示上次访问时间
l 创建Cookie,名为lasttime,值为当前时间,添加到response中;
l 在AServlet中获取请求中名为lasttime的Cookie;
l 如果不存在输出“您是第一次访问本站”,如果存在输出“您上一次访问本站的时间是xxx”;
AServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
Cookie cookie = new Cookie("lasttime", new Date().toString());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
Cookie[] cs = request.getCookies();
String s = "您是首次访问本站!";
if(cs != null) {
for(Cookie c : cs) {
if(c.getName().equals("lasttime")) {
s = "您上次的访问时间是:" + c.getValue();
}
}
}
response.getWriter().print(s);
}
Cookie中保存中文
Cookie的name和value都不能使用中文,若希望在Cookie中使用中文,那么需要先对中文进行URL编码,然后把编码后的字符串放入Cookie中
向客户端响应中添加Cookie
String name=URLEncoder.encode(“姓名”,”UTF-8”);
String value=URLEncoder.encode(“张三”,”UTF-8”);
Cookie c=new Cookie(name,value);
c.setMaxAge(60*60);
response.addCookie();
从客户端请求中获取Cookie
response.setContetype(“text/html;charset=utf-8”);
Cookie cs[]=request.getCookie();
if(cs!=null){
for(Cookie c:cs){
String name=URLEncoder.decode(c.getName(),”UTF-8”);
String value=URLEncoder.decode(c.getValue(),”UTF-8”);
String s=name+”:”+value;
response.getWriter().print(s);
}
}
显示曾经浏览过的商品
index.jsp
<body>
<h1>商品列表</h1>
<a href="/day06_3/GoodServlet?name=ThinkPad">ThinkPad</a><br/>
<a href="/day06_3/GoodServlet?name=Lenovo">Lenovo</a><br/>
<a href="/day06_3/GoodServlet?name=Apple">Apple</a><br/>
<a href="/day06_3/GoodServlet?name=HP">HP</a><br/>
<a href="/day06_3/GoodServlet?name=SONY">SONY</a><br/>
<a href="/day06_3/GoodServlet?name=ACER">ACER</a><br/>
<a href="/day06_3/GoodServlet?name=DELL">DELL</a><br/>
<hr/>
您浏览过的商品:
<%
Cookie[] cs = request.getCookies();
if(cs != null) {
for(Cookie c : cs) {
if(c.getName().equals("goods")) {
out.print(c.getValue());
}
}
}
%>
</body>
GoodServlet
public class GoodServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String goodName = request.getParameter("name");
String goods = CookieUtils.getCookValue(request, "goods");
if(goods != null) {
String[] arr = goods.split(", ");
Set<String> goodSet = new LinkedHashSet(Arrays.asList(arr));
goodSet.add(goodName);
goods = goodSet.toString();
goods = goods.substring(1, goods.length() - 1);
} else {
goods = goodName;
}
Cookie cookie = new Cookie("goods", goods);
cookie.setMaxAge(1 * 60 * 60 * 24);
response.addCookie(cookie);
response.sendRedirect("/day06_3/index.jsp");
}
}
CookieUtils
public class CookieUtils {
public static String getCookValue(HttpServletRequest request, String name) {
Cookie[] cs = request.getCookies();
if(cs == null) {
return null;
}
for(Cookie c : cs) {
if(c.getName().equals(name)) {
return c.getValue();
}
}
return null;
}
}
参考博客:
http://blog.csdn.net/qq_26676207/article/details/52671594