java存入cookies
Cookie cookie = new Cookie("name", value);
response.addCookie(cookie);
拿微信开发,一堆页面都要引入js方法,麻烦的很,本来以为存一次不关微信就一直存在,发现跳到第二个页面就没有cookies了,想来想去还是挺奇怪。
java取出cookies
/**
* 根据名字获取cookie
*/
public static String getCookieByName(HttpServletRequest request,String name){
Map<String,Cookie> cookieMap = ReadCookieMap(request);
if(cookieMap.containsKey(name)){
Cookie cookie = (Cookie)cookieMap.get(name);
return cookie.getValue();
}else{
LOG.error("cookies内的openId为空");
return null;
}
}
cookies是多个值,一般都是循环
/**
* 将cookie封装到Map里面
*/
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;
}
js获得cookies
function getCookie(c_name){
//先查询cookie是否为空
if (document.cookie.length>0){
//通过String对象的indexOf()来检查这个cookie是否存在,不存在就为 -1
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1){
//获取cookie值的开始位置
c_start=c_start + c_name.length+1
//得到值的结束位置。因为需要考虑是否是最后一项,所以通过";"号是否存在来判断
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1)
c_end=document.cookie.length
//通过substring()得到了值
return unescape(document.cookie.substring(c_start,c_end))
}
}
return ""
}
按天设置cookies
function setCookie(c_name, value, expiredays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
使用方法:setCookie(‘username’,’Darren’,30)
cookie域概念,这里参考了一个blog
路径能解决在同一个域下访问 cookie 的问题,咱们接着说 cookie 实现同域之间访问的问题。语法如下:
document.cookie = "name=value;path=path;domain=domain"
红色的domain就是设置的 cookie 域的值。
例如 “www.qq.com” 与 “sports.qq.com” 公用一个关联的域名”qq.com”,我们如果想让 “sports.qq.com” 下的cookie被 “www.qq.com” 访问,我们就需要用到 cookie 的domain属性,并且需要把path属性设置为 “/”。例:
document.cookie = "username=Darren;path=/;domain=qq.com"
注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。