JSP Cookie

JSP 通过 Servlet 支持 HTTP Cookie

HTTP Cookie

Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式

Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息

Cookie 除了传递信息,还用来识别回头客

网站识别回头客有三个步骤:

  1. 服务器脚本发送一系列 cookie 至浏览器,比如名字,年龄,ID 号码等等
  2. 浏览器在本地机中存储这些信息,以备下次访问时需要
  3. 当下一次浏览器发送任何请求至服务器时,它会同时将这些 cookie 信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情

Servlet 技术基础上,JSP 显然能够提供对 HTTP cookie 的支持

本章节我们将学习 JSP 如何设置、读取或删除 Cookie

Cookie 剖析

Cookie 通常在 HTTP 响应头中设置(JavaScript 也可以设置 cookie)

下面是携带了 HTTP Cookie 的响应头

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2015 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=twle; expires=Friday, 04-Feb-17 22:03:38 GMT; path=/; domain=twle.cn
Connection: close
Content-Type: text/html

HTTP 通过 Set-Cookie 设置 Cookie

Set-Cookie 信息头包含一个键值对,一个 GMT(格林尼治标准)时间,一个路径,一个域名,键值会通过 URL 编码,有效期域是个指令,告诉浏览器在什么时候之后就可以清除这个 Cookie

如果浏览器支持 Cookie,那么它会保存这些信息直到过期,如果用户访问的任何页面匹配了cookie 中的路径和域名,那么浏览器就会将这个 cookie 发回给服务器

一般情况下,携带了 Cookie 的 HTTP 请求头如下

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: www.twle.cn
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=twle

Cookie 中的中文

JSP 处理 Cookie 时需要对中文进行编码与解码

编码

String str=java.net.URLEncoder.encode("中文""UTF-8"); //编码

解码

String str=java.net.URLDecoder.decode("编码后的字符串","UTF-8"); // 解码

JSP Cookie

JSP 通过 request.getCookies() 方法获取 HTTP 请求中的 cookie,它会返回一个 Cookie 对象的数组

JSP Cookie 对象的方法列表

方法 & 描述
public void setDomain(String pattern)
设置 cookie 的域名,如 twle.cn
public String getDomain()
获取 cookie 的域名,比如 twle.cn
public void setMaxAge(int expiry)
设置 cookie 有效期,以秒为单位,默认有效期为当前 session 的存活时间
public int getMaxAge()
获取 cookie 有效期,以秒为单位,默认为-1 ,表明 cookie 会活到浏览器关闭为止
public String getName()
返回 cookie 的名称,名称创建后将不能被修改
public void setValue(String newValue)
设置 cookie 的值
public String getValue()
获取 cookie 的值
public void setPath(String uri)
设置 cookie 的路径,默认为当前页面目录下的所有 URL,还有目录下的所有子目录
public String getPath()
获取 cookie 的路径
public void setSecure(boolean flag)
指明 cookie 是否要加密传输
public void setComment(String purpose)
设置注释描述 cookie 的目的。当浏览器将 cookie 展现给用户时,注释将会变得非常有用
public String getComment()
返回描述 cookie 目的的注释,若没有则返回null

JSP 设置 Cookie

JSP 设置 cookie 通常有三个步骤

  1. 创建一个 Cookie 对象

    JSP 调用 Cookie 的构造函数,传递字符串格式的 cookie 名称和值做参数

    Cookie cookie = new Cookie("key","value");
    

    Cookie 名称和值不能包含空格或者如下的字符

    [ ] ( ) = , " / ? @ : ;
    
  2. 设置 Cookie 有效期

    调用 setMaxAge() 方法设置 cookie 的有效期,下面的调用将有效期设置为 24小时

    cookie.setMaxAge(60*60*24);
    
  3. 通过 HTTP 响应头发送 cookie

    调用 response.addCookie() 方法在 HTTP 响应头中添加 cookie

    response.addCookie(cookie);
    

范例 : 设置 Cookie

首先,通过 response.addCookie() 方法将表单传递来的数据设置到 Cookie 中

webapp/set_cookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.net.*" %>
<%
   // 编码,解决中文乱码   
   String str = URLEncoder.encode(request.getParameter("name"),"utf-8");  

   // 设置 name 和 url cookie 
   Cookie name = new Cookie("name",str);
   Cookie url = new Cookie("url",request.getParameter("url"));

   // 设置cookie过期时间为24小时。
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 

   // 在响应头部添加cookie
   response.addCookie( name );
   response.addCookie( url );
%>
<!DOCTYPE html>
<meta charset="utf-8">
<title>设置 Cookie - JSP 基础教程 | 简单教程(www.twle.cn)</title>
<ul>
<li><p><b>网站名:</b>
   <%= request.getParameter("name")%>
</p></li>
<li><p><b>网址:</b>
   <%= request.getParameter("url")%>
</p></li>
</ul>
<p>设置 Cookie - JSP 基础教程 | 简单教程(www.twle.cn)</p>

然后开发一个 HTML 表单通过 POST 方法将 网站名网址 发送到服务器端

webapp/cookie_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<meta charset="utf-8">
<title>Cookie 表单 - JSP 基础教程 | 简单教程(www.twle.cn)</title>
<form action="set_cookie.jsp">
站点: <input type="text" name="name" method="POST">
<br />
网址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
<p>Cookie 表单 - JSP 基础教程 | 简单教程(www.twle.cn)</p>

在浏览器上输入

http://localhost:8080/jsp/cookie_form

显示如下

然后通过浏览器的调试工具查看该网站下的所有 cookie,发现 Cookie 已经设置正确

JSP 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.