您的位置:首页 > 其它

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

2015-09-11 17:41 573 查看
服务器应用应用程序有时是需要判断是否为同一个客户发出的请求,比如客户的多次选购商品。因此,有必要跟踪同一个客户发出的一系列请求。通过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只能保存字符串

如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: