服务器应用应用程序有时是需要判断是否为同一个客户发出的请求,比如客户的多次选购商品。因此,有必要跟踪同一个客户发出的一系列请求。通过Cookie技术能够将少量的请求数据保存下来。
以下是本文的目录大纲:
一、Cookie的原理
二、如何创建Cookie
三、如何查询Cookie
四、如何修改Cookie
五、Cookie的生存时间
六、Cookie的中文编码
七、Cookie的路径问题
若有不正之处,请批评指正,不胜感激。
若转载请标明原文链接:
深入剖析web的状态管理-Cookie
二、如何创建Cookie
Servlet API为使用Cookie提供了javax.servlet.http.Cookie
创建:
Cookie c=new Cookie(String name,String value); response.addCookie(c);
//创建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();
举例:
//获取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
举例:
//修改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。
举例:
//创建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只能保存合法的ASCII字符。如果要保存中午,需要将中文转换成合法的ASCII字符,即编码。
//进行UTF-8编码
String city=URLEncoder.encode("北京","UTF-8");
//创建cookie
Cookie c2=new Cookie("city",city);
//获取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: "+URLDecoder.decode(value,"UTF-8")+"");
}
}else{
out.println("没有cookies信息");
}
七、Cookie的路径问题
Cookie c=new Cookie(“uname”,”Jack”);
c.setPath(“/appName”);
response.addCookie(c);
Cookie的限制:
如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。