1.修改hosts
在hosts文件中添加如下配置:
# Test Cookie
127.0.0.1 xx.hostName.com
127.0.0.1 hostName.com
127.0.0.1 xx1.hostName.com
其中hostName.com为顶级域名,另外两个是二级域名
2.建立web项目并添加Cookie测试类
2.1BaseController.java:
package org.es.skinservice.web;
import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.es.skinservice.service.RolesService;
import org.es.skinservice.utils.HttpCode;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/cookie")
public class CookiesController extends BaseController {
@Resource
private RolesService rolesService;
@RequestMapping(value = "/setCookie/{id}", method = RequestMethod.GET)
@ResponseBody
public String setCookie(HttpServletResponse response, @PathVariable("id") String id) {
Cookie cookie = new Cookie("name" + id, id);
cookie.setDomain("hostname.com");
cookie.setPath("/");
response.addCookie(cookie);
return getResult(HttpCode.OK_GET, cookie);
}
@RequestMapping(value = "/getCookie", method = RequestMethod.GET)
@ResponseBody
public String getCookie() {
Cookie[] cookies = request.getCookies();
return getResult(HttpCode.OK_GET, cookies);
}
}
2.2CookiesController.java
package org.es.skinservice.web;
import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.es.skinservice.service.RolesService;
import org.es.skinservice.utils.HttpCode;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/cookie")
public class CookiesController extends BaseController {
@Resource
private RolesService rolesService;
@RequestMapping(value = "/setCookie/{id}", method = RequestMethod.GET)
@ResponseBody
public String setCookie(HttpServletResponse response, @PathVariable("id") String id) {
Cookie cookie = new Cookie("name" + id, id);
***cookie.setDomain("hostname.com");***
cookie.setPath("/");
response.addCookie(cookie);
return getResult(HttpCode.OK_GET, cookie);
}
@RequestMapping(value = "/getCookie", method = RequestMethod.GET)
@ResponseBody
public String getCookie() {
Cookie[] cookies = request.getCookies();
return getResult(HttpCode.OK_GET, cookies);
}
}
3.测试
第一步:通过浏览器访问http://xx.hostname.com:1180/cookie/setCookie/xx
添加cookie
第二步:分别通过浏览器访问http://xx.hostname.com:1180/cookie/getCookie
http://xx1.hostname.com:1180/cookie/getCookie
http://hostname.com:1180/cookie/getCookie
观察结果中的Cookie,三个的结果都如下:
[{
"name": "JSESSIONID",
"value": "54DBED263ED0CE861E3AC12187A24DF0",
"version": 0,
"maxAge": -1,
"secure": false,
"httpOnly": false
},
{
"name": "namexx",
"value": "xx",
"version": 0,
"maxAge": -1,
"secure": false,
"httpOnly": false
}]
说明共享cookie成功!
我们还可以以同样的方式测试顶级域名添加Cookie然后通过二级域名获取对应的Cookie,得到的结果也是相同的
上面顶级域名和二级域名共享cookie成功的关键在于这一行代码:
cookie.setDomain("hostname.com");
也就是说必须将cookie的domain设置成顶级域名的hostname,否则通过那个域名设置的cookie只能通过当前域名才能获取到