深入剖析web的状态管理-Cookie

来源:互联网 发布:开源智能问答系统 java 编辑:程序博客网 时间:2024/05/18 14:23

服务器应用应用程序有时是需要判断是否为同一个客户发出的请求,比如客户的多次选购商品。因此,有必要跟踪同一个客户发出的一系列请求。通过Cookie技术能够将少量的请求数据保存下来。

以下是本文的目录大纲:
一、Cookie的原理
二、如何创建Cookie
三、如何查询Cookie
四、如何修改Cookie
五、Cookie的生存时间
六、Cookie的中文编码
七、Cookie的路径问题

若有不正之处,请批评指正,不胜感激。
若转载请标明原文链接:
深入剖析web的状态管理-Cookie


一、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的值
    举例:
//创建cookieCookie c1=new Cookie("uname","Kitty");Cookie c2=new Cookie("city","Beijing");//添加cookie到responseresponse.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

  • step1,获取客户端发送的所有Cookie
  • step2,根据name找到要修改的Cookie
  • step3,调用Cookie的setValue(String newValue)方法修改该Cookie的值
  • step4,将修改后的Cookie加入到response发送回客户端

举例:

//修改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。
举例:

//创建cookieCookie c1=new Cookie("uname","Kitty");c1.setMaxAge(100);//保存100秒Cookie c2=new Cookie("city","Beijing");//添加cookie到responseresponse.addCookie(c1);response.addCookie(c2);

六、Cookie的中文编码

  • Cookie编码

Cookie只能保存合法的ASCII字符。如果要保存中午,需要将中文转换成合法的ASCII字符,即编码。

//进行UTF-8编码String city=URLEncoder.encode("北京","UTF-8");//创建cookieCookie c2=new Cookie("city",city);
  • Cookie解码
//获取cookieCookie[] 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只能保存字符串

如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。

0 0
原创粉丝点击