深入剖析web的状态管理-Cookie
2015-09-11 17:41
573 查看
服务器应用应用程序有时是需要判断是否为同一个客户发出的请求,比如客户的多次选购商品。因此,有必要跟踪同一个客户发出的一系列请求。通过Cookie技术能够将少量的请求数据保存下来。
以下是本文的目录大纲:
一、Cookie的原理
二、如何创建Cookie
三、如何查询Cookie
四、如何修改Cookie
五、Cookie的生存时间
六、Cookie的中文编码
七、Cookie的路径问题
若有不正之处,请批评指正,不胜感激。
若转载请标明原文链接:
深入剖析web的状态管理-Cookie
一、Cookie的原理
![](http://img.blog.csdn.net/20150911204756620)
二、如何创建Cookie
Servlet API为使用Cookie提供了javax.servlet.http.Cookie
创建:
Cookie c=new Cookie(String name,String value); response.addCookie(c);
name:用于区分不同Cookie的名字
value:Cookie的值
举例:
三、如何查询Cookie
获取客户端的所有Cookie对象:
Cookie[] request.getCookies();
注:该方法有可能返回null
获取一个Cookie对象的名称或值:
String Cookie.getName();
String Cookie.getValue();
举例:
四、如何修改Cookie
step1,获取客户端发送的所有Cookie
step2,根据name找到要修改的Cookie
step3,调用Cookie的setValue(String newValue)方法修改该Cookie的值
step4,将修改后的Cookie加入到response发送回客户端
举例:
五、Cookie的生存时间
默认情况下,浏览器会将Cookie保存在内存中,只要浏览器不关闭,Cookie就一直存在
如果希望关闭浏览器后Cookie仍在,可以通过设置过期时间
void Cookie.setMaxAge(int seconds);
注:seconds单位是秒,精度不是很高
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
正值表示 cookie 将在经过该值表示的秒数后过期。 注意,该值是 cookie 过期的最大 生存时间,不是 cookie
的当前生存时间。 负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除 cookie。
举例:
六、Cookie的中文编码
Cookie编码
Cookie只能保存合法的ASCII字符。如果要保存中午,需要将中文转换成合法的ASCII字符,即编码。
Cookie解码
七、Cookie的路径问题
设置Cookie的路径:
Cookie c=new Cookie(“uname”,”Jack”);
c.setPath(“/appName”);
response.addCookie(c);
Cookie的限制:
Cookie可以被用户禁止
Cookie会将状态保存在浏览器端,不安全。
对于敏感数据,需要加密后再使用Cookie来保存
Cookie只能保存少量的数据,大约4kb左右
Cookie的个数是有限制的
Cookie只能保存字符串
如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。
以下是本文的目录大纲:
一、Cookie的原理
二、如何创建Cookie
三、如何查询Cookie
四、如何修改Cookie
五、Cookie的生存时间
六、Cookie的中文编码
七、Cookie的路径问题
若有不正之处,请批评指正,不胜感激。
若转载请标明原文链接:
深入剖析web的状态管理-Cookie
一、Cookie的原理
二、如何创建Cookie
Servlet API为使用Cookie提供了javax.servlet.http.Cookie
创建:
Cookie c=new Cookie(String name,String value); response.addCookie(c);
name:用于区分不同Cookie的名字
value:Cookie的值
举例:
[code]//创建cookie Cookie c1=new Cookie("uname","Kitty"); Cookie c2=new Cookie("city","Beijing"); //添加cookie到response response.addCookie(c1); response.addCookie(c2);
三、如何查询Cookie
获取客户端的所有Cookie对象:
Cookie[] request.getCookies();
注:该方法有可能返回null
获取一个Cookie对象的名称或值:
String Cookie.getName();
String Cookie.getValue();
举例:
[code]//获取cookie Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ String name=c.getName(); String value=c.getValue(); out.println("Name: "+name +"Value: "+value); } }else{ out.println("没有cookies信息"); }
四、如何修改Cookie
step1,获取客户端发送的所有Cookie
step2,根据name找到要修改的Cookie
step3,调用Cookie的setValue(String newValue)方法修改该Cookie的值
step4,将修改后的Cookie加入到response发送回客户端
举例:
[code]//修改cookie Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ String name=c.getName(); if(name.equals("city")){ c.setValue("Changsha"); response.addCookie(c); } } }else{ out.println("没有cookies信息"); }
五、Cookie的生存时间
默认情况下,浏览器会将Cookie保存在内存中,只要浏览器不关闭,Cookie就一直存在
如果希望关闭浏览器后Cookie仍在,可以通过设置过期时间
void Cookie.setMaxAge(int seconds);
注:seconds单位是秒,精度不是很高
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
正值表示 cookie 将在经过该值表示的秒数后过期。 注意,该值是 cookie 过期的最大 生存时间,不是 cookie
的当前生存时间。 负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除 cookie。
举例:
[code]//创建cookie Cookie c1=new Cookie("uname","Kitty"); c1.setMaxAge(100);//保存100秒 Cookie c2=new Cookie("city","Beijing"); //添加cookie到response response.addCookie(c1); response.addCookie(c2);
六、Cookie的中文编码
Cookie编码
Cookie只能保存合法的ASCII字符。如果要保存中午,需要将中文转换成合法的ASCII字符,即编码。
[code]//进行UTF-8编码 String city=URLEncoder.encode("北京","UTF-8"); //创建cookie Cookie c2=new Cookie("city",city);
Cookie解码
[code]//获取cookie Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ String name=c.getName(); String value=c.getValue(); out.println("<h3>Name: "+name +"Value: "+URLDecoder.decode(value,"UTF-8")+"</h3>"); } }else{ out.println("没有cookies信息"); }
七、Cookie的路径问题
设置Cookie的路径:
Cookie c=new Cookie(“uname”,”Jack”);
c.setPath(“/appName”);
response.addCookie(c);
Cookie的限制:
Cookie可以被用户禁止
Cookie会将状态保存在浏览器端,不安全。
对于敏感数据,需要加密后再使用Cookie来保存
Cookie只能保存少量的数据,大约4kb左右
Cookie的个数是有限制的
Cookie只能保存字符串
如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。
相关文章推荐
- java学习经典书籍_杂篇
- 性能测试常见问题 (性能论述)
- 【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
- 北京Loft投资分析
- Wilson定理证明
- 掌握方法,稳中求进
- iOS Runtime能做什么?
- 关爱Android手机休眠,为什么耗电
- 利用js动态控制animation动画
- js表头固定实现思路汇总
- hdu 3650 Hot Expo(TwoPointer)
- ajaxfileupload.js的简单使用
- Java代码生成器--告别无止境的增删改查
- Java代码生成器--告别无止境的增删改查
- Java代码生成器--告别无止境的增删改查
- Java代码生成器--告别无止境的增删改查
- Java代码生成器--告别无止境的增删改查
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- Qt pro文件的写法规则
- WPA/WPA2安全认证加密原理详解