很久没用cookie了,最近遇到要使用cookie的需求;公司web项目中在使用google map。
大抵需求是用户使用地图,退出系统时记录map zoom和center location,
再次登录时显示上一次的地图状态。
浅显分析,有三个要点:
1.地图移动,缩放等都要记录
2.退出时,记录在库
3.登录时查库,用库里的数据初始化地图。
先实现需求,以后再考虑更好方案,如此要做到:
1.监听地图,将zoom和location记录在cookie;
2.从cookie取值存库;
3.从库中取值,写入cookie;
一步一步来:
一、监听地图,写入cookie,google 提供许多监听事件,再次举一例,如下
google.maps.event.addListener(map, "zoom_changed", function() {
var location = map.getCenter();
var lastZoom = map.getZoom();
document.cookie="zoom="+lastZoom+";path=/;";
var los= new Array(); //定义一数组
los=String(location).split(',');
document.cookie="lat="+String(los[0]).replace('(','')+";path=/;";
document.cookie="lng="+String(los[1]).replace(')','')+";path=/;";
});
最初打算把经纬度频道一起,逗号分隔就好了,一起放cookie里,
要注意奥,重点(敲黑板),cookie中的数据不能包含逗号分号等。。。。
还有上边的红色字体,"/"表示cookie读取路径,也可以理解为权限。像我这里前后端交互使用的,一定要用“/”.
二、java读取cookie
从request里直接读取就好了
Cookie[] cookies=request.getCookies();
if(cookies!=null){
String zoom="10";
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
if(cookie.getName().equalsIgnoreCase("zoom")){
zoom = cookie.getValue();
}
}
三、写入cokie
Cookie zoom1=new Cookie("zoom",sysUser.getZoom());
zoom1.setPath("/");
logger.info("befoe add zoom");
response.addCookie(zoom1);
此处也要注意path
还有一点,tomcat7或者更低版本,在写入cookie时,不检查数据有效性,
我服务器上使用tomcat9,本地正常,服务器部运行,放大exception才发现
高版本tomcat做了更安全的检查,有特殊字符,如逗号都要抛异常