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

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

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

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

一、Cookie的原理
深入剖析web的状态管理-Cookie_第1张图片

二、如何创建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 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

  • 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。
举例:

//创建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字符,即编码。

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

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

你可能感兴趣的:(路径,cookie,状态管理)