java WEB中Cookie的操作和使用
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是各自用户自己的数据。
java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题。
构造Cookie对象
Cookie(java.lang.String name, java.lang.String value)
设置cookie
void setPath(java.lang.String uri) :设置cookie的有效访问路径
设置Cookie的有效访问路径,有效访问路径指的事Cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器的时就会带着Cookie信息,否则不带Cookie信息,默认是在当前web项目的路径下
void setMaxAge(int expiry) : 设置cookie的有效时间
expiry可以是正整数,负整数,和零
正整数:表示Cookie数据保存浏览器的缓存到硬盘中,数值表示保存的时间
负整数:表示Cookie数据保存到浏览器的内存中,浏览器关闭Cookie就丢失了
零:表示删除同名的Cookie数据
void setValue(java.lang.String newValue) :设置cookie的值
Cookie数据类型只能保存非中文字符串类型的。可以保存多个Cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB
发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
服务器端接收cookie
Cookie[] request.getCookies() : 接收cookie
建立一个生命周期为session回话级别的cookie,即随着浏览器的关闭即消失的cookie
HttpServletRequest request
HttpServletResponse response
Cookie cookie = new Cookie("yourcookiename","yourcookievalue");
response.addCookie(cookie);
建立一个自定义生命周期的cookie,可以设置他的生命周期
cookie = new Cookie("cookiename","cookievalue");
// 设置Cookie的有效时间
cookie.setMaxAge(20);//该cookie只存活20秒,从最后不调该cookie开始计算
// cookie.setMaxAge(-1);//该cookie保存在浏览器内存中,关闭浏览器则销毁该cookie
// cookie.setMaxAge(0);//删除根该cookie同名的cookie
//设置路径,这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问
cookie.setPath("/");
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
for(Cookie cookie : cookies){
cookie.getName();// get the cookie name
cookie.getValue(); // get the cookie value
}
上面就是基本的读写cookie的操作。我们在实际中最好进行一下封装,比如增加一个cookie,我们关注的是cookie的name,value,生命周期,所以进行封装一个函数,当然还要传入一个response对象
/**
* 设置cookie
* @param response
* @param name cookie名字
* @param value cookie值
* @param maxAge cookie生命周期 以秒为单位
*/
public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
Cookie cookie = new Cookie(name,value);
cookie.setPath("/");
if(maxAge>0) cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
/**
* 根据名字获取cookie
* @param request
* @param name cookie名字
* @return
*/
public static Cookie getCookieByName(HttpServletRequest request,String name){
Map<String,Cookie> cookieMap = ReadCookieMap(request);
if(cookieMap.containsKey(name)){
Cookie cookie = (Cookie)cookieMap.get(name);
return cookie;
}else{
return null;
}
}
/**
* 将cookie封装到Map里面
* @param request
* @return
*/
private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){
Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
Cookie[] cookies = request.getCookies();
if(null!=cookies){
for(Cookie cookie : cookies){
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
}
实验,新建一个简单WEB工程,创建两个jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>放COOKIE</title>
</head>
<body>
<%
//1.创建Cookie对象
Cookie cookie = new Cookie("tokenID","123456789");
//2.设置Cookie参数
//2.1.设置Cookie的有效路径
cookie.setPath("/");//默认就是web项目的地址
//2.2.设置Cookie的有效时间
cookie.setMaxAge(60*30);//该cookie只存活秒,从最后不调该cookie开始计算
//3.把数据发送到浏览器
response.addCookie(cookie);
%>
</body>
</html>
读取的页面代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>读COOKIE</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
if(null!=cookies){
for(Cookie cookie : cookies){
cookieMap.put(cookie.getName(), cookie);
}
}
%>
<%=cookieMap.get("tokenID").getValue() %>
</body>
</html>
浏览器中F12查看网站信息https://www.leftso.com/article/197.html