cookie 是存储在客户端浏览器下的少量文本型数据,随着页面响应由服务器发送到客户端并保存下来的。cookie 对象的类型是 Cookie。
当浏览器再次向该网站发送请求时,客户端会将 Cookie 中与之相关的信息连同请求信息一起发送,因此在服务器可以再次读取到 Cookie 的值。
1)写入 cookie
cookie 是随着响应由服务端发送到客户端浏览器保存的,通过 response 对象的 addCookie(Cookie cookie) 方法来实现
Cookie c = new Cookie("user", username); //创建 Cookie 保存用户名
c.setMaxAge(300); //300 秒后 Cookie 过期
response.addCookie(c); //向响应添加 Cookie,发送到客户端
方 法 说 明
void setMaxAge(int expiry) 设置 Cookie 的有效期,以秒为单位,默认值为值为-1 ,表示保存到浏览器关闭
String getMaxAge() 获取 Cookie 的有效时间,以秒为单位
void setValue(String value) 在 Cookie 创建后,对 Cookie 进行赋值
String getName() 获取 Cookie 的名称
String getValue() 获取 Cookie 的值
cookie.setDomain("/localhost"); 设置作用域名
2) 读取 cookie
客户端保存的 cookie 会随着请求发送回相应的服务器域,使用 request.getCookies() 返回 cookie 数组
<%
String user = null;
request.setCharacterEncoding("gbk");
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie c : cookies){
if(c.getName().equals("user")){
user = c.getValue();
out.println( "<h1>欢迎" + user + "进入本页面.</h1>");
}}}
%>
3) 跨域
正常的 cookie 只能在一个应用中共享,即只能由创建它的应用获得
(1) 同一应用服务器内共享
1) cookie.setPath("/"): 于ac 下面设置cookie :
此处是相对于应用服务器存放应用的文件夹的根目录而言的 (比如 tomcat 下面的 webapp),因此 cookie.setPath("/"); 之后,可以在 webapp 文件夹下的所有应用共享 cookie
2) cookie.setPath("/b/"): 于ac 下面设置 cookie :
此时应用设置的 cookie 只能在b 应用下的获得,ac也不可以。
3) cookie.setPath("/b/jsp"):于ac设置
只有在b/jsp 下面可以获得 cookie
(2) 跨域共享 cookie 的方法
1) 设置 cookie.setDomain(".b.com");
A 机所在的域:home.ac.com,A 有应用 ac
B 机所在的域:b.com,B 有应用b
这样在ac、b 下面都可以取到 cookie
注:输入 url 访问b 的时候,必须输入域名才能解析。比如说在 A 机输入:http://jsp.b.com:8080/b, 可以获取 ac 在客户端设置的 cookie,而 B 机访问本机:http://localhost:8080/b 则不可以获得 cookie。