response.cookies

本文涉及的产品
.cn 域名,1个 12个月
简介: response.cookies
String fullContentType = “application/json;charset=UTF-8”;
response.setContentType(fullContentType);//告知客户端响应正文类型
response.setHeader(“Cache-Control”, “no-cache”);//控制浏览器不要缓存
//设置允许跨域
response.setHeader(“Access-Control-Allow-Origin”,"*");
response.setHeader(“Access-Control-Allow-Credentials”,“true”);
response.setHeader(“Access-Control-Allow-Headers”, “Content-Type,token”);
response.setHeader(“Access-Control-Allow-Methods”,“PUT,POST,GET,DELETE,OPTIONS”);
request.setCharacterEncoding(“UTF-8”);
response.setCharacterEncoding(“UTF-8”)//设置编码
Cookies


1.String name:该Cookie的名称。Cookie一旦创建,名称便不可更改。 Object value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。


2.int maxAge:该Cookie失效的时间,单位秒。


如果为正数,则该Cookie在>maxAge秒之后失效。

如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。

如果为0,表示删除该Cookie。默认为–1。


3.boolean secure:该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,


在网络>上传输数据之前先将数据加密。默认为false。


4.String path:该Cookie的使用路径。如果设置为“/sessionWeb/”,则

只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”

,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。


5.String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符

必须为“.”。


6.String comment:该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明。 int version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范。

/**

  • 得到Cookie的值,
  • @author www.wityx.com
  • @param request 请求
  • @param cookieName cookie的名字
  • @return
• */
public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
Cookie[] cookieList = request.getCookies();
if (cookieList == null || cookieName == null) {
return null;
}
String retValue = null;
try {
for (int i = 0; i < cookieList.length; i++) {
if (cookieList[i].getName().equals(cookieName)) {
if (isDecoder) {
retValue = URLDecoder.decode(cookieList[i].getValue(), “UTF-8”);
} else {
retValue = cookieList[i].getValue();
}
break;
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return retValue;
}
/**
• 设置Cookie的值,并使其在指定时间内生效
• @author www.wityx.com
• @param cookieMaxage cookie生效的最大秒数
*/
private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
try {
if (cookieValue == null) {
cookieValue = “”;
} else if (isEncode) {
cookieValue = URLEncoder.encode(cookieValue, “utf-8”);
}
Cookie cookie = new Cookie(cookieName, cookieValue);
if (cookieMaxage > 0)
cookie.setMaxAge(cookieMaxage);
if (null != request) {// 设置域名的cookie
String domainName = getDomainName(request);
System.out.println(domainName);
if (!“localhost”.equals(domainName)) {
cookie.setDomain(domainName);
}
}
cookie.setPath("/");
response.addCookie(cookie);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*@author www.wityx.com
• 得到cookie的域名
*/
private static final String getDomainName(HttpServletRequest request) {
String domainName = null;
String serverName = request.getRequestURL().toString();
if (serverName == null || serverName.equals("")) {
domainName = “”;
} else {
serverName = serverName.toLowerCase();
serverName = serverName.substring(7);
final int end = serverName.indexOf("/");
serverName = serverName.substring(0, end);
final String[] domains = serverName.split("\.");
int len = domains.length;
if (len > 3) {
// www.wityx.com
domainName = “.” + domains[len - 3] + “.” + domains[len - 2] + “.” + domains[len - 1];
} else if (len <= 3 && len > 1) {
// wityx.com or 5ityx.cn
domainName = “.” + domains[len - 2] + “.” + domains[len - 1];
} else {
domainName = serverName;
}
}
if (domainName != null && domainName.indexOf("? > 0) {
String[] ary = domainName.split("\?;
domainName = ary[0];
}
return domainName;
}

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表关闭浏览器,cookies即失效。

注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。



相关文章
|
2天前
|
应用服务中间件 数据安全/隐私保护
|
24天前
|
前端开发 Java 应用服务中间件
Request&Response(4)
Request&Response
16 0
|
24天前
|
Java 应用服务中间件 API
Request&Response(1)
Request&Response
17 0
|
24天前
|
存储 Java 应用服务中间件
Request&Response(3)
Request&Response
19 0
|
24天前
|
Java 数据库连接 数据库
Request&Response(5)
Request&Response
17 0
|
1月前
|
Java 数据库连接 数据库
Request 和 Response详解(下)
Request 和 Response详解(下)
26 1
|
1月前
|
存储 缓存 前端开发
Request 和 Response详解(中)
Request 和 Response详解(中)
32 0
|
1月前
|
前端开发 Java 应用服务中间件
Request 和 Response详解(上)
Request 和 Response详解(上)
32 0
|
存储
Request和Response详解
Request和Response详解
|
Java 应用服务中间件 Apache