Cookie:客户端对象
1)什么是Cookie
Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户电脑上保存信息并且随后再取回它。
举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。
如果用户使用IE浏览器访问Web,那么用户就会看到所有保存在自己硬盘上的Cookie。它们最常存放的地方是C:\Windows\Cookies。Cookie是以"关键字key=值value"的格式来保存记录的。
基本原理:
1.创建Cookie(服务器端创建)
2.设置存储Cookie(存储到响应头中)
3.发送Cookie
4.读取Cookie
客户端第一次发送请求 --> 服务器接收到请求 --> 创建cookie对象 --> 存储到响应头
--> 以响应的形式发送到客户端 --> 客户端收到响应信息 解析响应信息 保存cookie
--> 客户端再次发送同类请求的时候会携带cookie信息发送请求 --> 服务器 解析cookie
在关闭浏览器之前, cookie变量便一直是有效的,所以能够保证长时间不掉线
2)创建一个Cookie对象
调用Cookie对象的构造函数就可以创建Cookie对象。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。
例如:
Cookie c = new Cookie("username","john");
3)将Cookie对象传送到客户端
在JSP中,如果要将封装好的Cookie对象传送到客户端,可使用Response对象的addCookie()方法。
例如:
response.addCookie(c)
4)读取保存到客户端的Cookie
使用Request对象的getCookie()方法,执行时将所有客户端传来的Cookie对象以数组的形式排列,如果要取出符合需要的Cookie对象,就需要循环比较数组内每个对象的关键字。
例如:
Cookie[] c = request.getCookies(); if(c != null){for(int i = 0;i < c.length;i++){ if("username".equals(c[i].getName())){ out.println(c[i].getValue()); }}}
修改cookie的值
public Cookie updateCookie(String cookieName, String newValue, Cookie[] cookie) {if (cookie != null) {for (int i = 0; i < cookie.length; i++) {if ("cookieName".equals(cookie[i].getName())) {cookies[i].setPath("/url"); cookies[i].setValue(newValue);// 将修改后的cookie作为响应返回给客户端response.addCookie(cookies[i]);}}}
}
5)设置Cookie对象的有效时间
调用Cookie对象的setMaxAge()方法便可以设置Cookie对象的有效时间。
例如:
Cookie c = new Cookie("username","john"); c.setMaxAge(3600);
如何解决Cookie中的中文乱码问题?请写一段程序,在后台servlet中设置cookie,cookie中需要包含中文字符,客户端发送请求后,能够在页面上显示出Cookie中的所有信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//对中文value值进行编码String value = java.net.URLEncoder.encode("中文","utf-8");Cookie cookie = new Cookie("chinese_code",value);cookie.setPath("/");cookie.setMaxAge(60*60*24*6);response.addCookie(cookie);//解析response.getWriter().write(cookie.getName()+" = "+URLDecoder.decode(cookie.getValue(),"utf-8"));}