cookie 的创建使用
查看 java ee API :Cookie类在javax.servlet.http.Cookie包中
- Cookie 的创建格式
(1) Cookie 的构造方法
Cookie(String name, String value)
name就是cookie的名称,value就是cookie要保存的值;
(2) 在服务器端,需要使用 response 对象的 addCookie 方法,将 cookie 响应给浏览器
addCookie(Cookie cookie) :void
Adds the specified cookie to the response.
- Cookie 中的方法
2.1 常用方法:
(1) 修改 cookie 的路径:
setPath(String uri) :void
设置访问服务器的什么路径时,携带cookie; 通常直接写/
假如设置cookie的路径为 “/项目名/资源名称”, 那么访问“/项目名/资源名称”或者“/项目名/资源名称/XXXX/yyyy...” 子目录都会携带当前cookie
(2) 修改 cookie 的存活时间:(默认情况下,cookie 仅在一次会话中(从浏览器打开到浏览器关闭)中生效,时间单位是秒):
setMaxAge(int expiry) : void
设置存活时间,如果是负数,代表会话范围内有效,如果是0代表立刻死亡,如果是正数,代表存活指定的秒数;
(3) 在 request 对象中有关于获取 cookie 对象的方法:(浏览器已经有 cookie , 要在服务器上获取或修改)
getCookies() :Cookie[]
获取浏览器携带过来的所有cookie对象
(4) Cookie 的方法:(获取 cookie 对象后 使用的方法)
getName() :String
获取cookie的名称
getValue() :String
获取cookie保存的值
(5) 删除 cookie :为了通知浏览器删除哪个cookie, cookie的name属性和path属性必须一致。当MaxAge属性设置为 零 时,即通知浏览器 立即删除。
1、将cookie的name(key)保持一致,value 设置为 "";
cookie = new Cookie("username","")
2、路径要发送cookie时保持一致。
cookie.setPath("/");
3、设置存活时间为0,
cookie.setMaxAge(0)
4、将cookie发送给浏览器。
response.addCookie(cookie)
2.2 非常用方法:
(1) 给当前 cookie 重新赋值
setValue(String newValue):void
(2) 对该cookie进行描述的信息(说明作用),浏览器显示cookie信息时能看到
setComment(String purpose):void
(3) 域名正则 使用
setDomain(String pattern):void
符合该pattern(域名正则)的就可以访问该Cookie的域名。如果设置为“.google.com”,则所有
以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”
(4) 设置只通过 http 进行访问
setHttpOnly(boolean httpOnly):void
设为true后,只能通过http访问,javascript无法访问,还可防止xss读取cookie
(5) 是否使用安全传输协议
setSecure(boolean flag):void
是否使用安全传输协议。为true时,只有当是https请求连接时cookie才会发送给服务器端,而http时不会,但是服务端还是可以发送给浏览端的。
注意: 如果cookie值为Unicode字符,需要为字符编码。如果cookie值为二进制数据,则需要使用BASE64编码
cookie自动登录
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>通过cookie保存并读取用户登录信息</title>
</head>
<body>
<%
Cookie[ ] cookies = request.getCookies();//从request中获得Cookie对象的集合
String user = ""; //登录用户
String date = ""; //注册的时间
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) { //遍历cookie对象的集合
if (cookies[i].getName().equals("mrCookie")) {//如果cookie对象的名称为mrCookie
user = URLDecoder.decode(cookies[i].getValue().split("#")[0],"UTF-8");//获取用户名
date = cookies[i].getValue().split("#")[1];//获取注册时间
}
}
}
if ("".equals(user) && "".equals(date)) {//如果没有注册
%>
游客您好,欢迎您初次光临!
<form action="deal.jsp" method="post">
请输入姓名:<input name="user" type="text" value="">
<input type="submit" value="确定">
</form>
<%
} else {//已经注册
%>
欢迎[<b><%=user %></b>]再次光临<br>
您注册的时间是:<%=date %>
<%
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>写入cookie</title>
<script type="text/javascript">window.location.href="index.jsp"</script>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String user=URLEncoder.encode(request.getParameter("user"),"UTF-8"); //获取用户名
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd——hh:mm:ss");
String currentTime = format.format(date);
Cookie cookie = new Cookie("mrCookie", user+"#"+currentTime);
cookie.setMaxAge(60*60*24*30); //设置cookie有效期30天
response.addCookie(cookie); //保存cookie
%>
</body>
</html>