16.Cookie

2018-06-19  本文已影响0人  若愚同学

Cookie:

点心,可以使用会话跟踪.

客户端技术:

把需要共享的信息,保存在客户端(浏览器中).

Cookie的操作:

1:创建Cookie和设置共享数据:
Cookie c = new Cookie(String name,String value).
2:把Cookie放入响应中,把Cookie的共享数据传递给浏览器,由浏览器保存.
response对象.addCookie(C).
3.获取Cookie和Cookie中的数据.(从请求中获取)
Cookie[] cs = req.getCookies();
if(cs != null){
    //获取指定名称的Cookie
    for(Cookie cookie : cs){
        String name = cookie.getName();
        if("currentName".equals(name)){
            username = cookie.getValue();
            break;
        }
    }
}
4.Cookie的name和value不支持中文.

解决方案:对中文做编码和解码.

String msg = "济天下";
//加密
msg = URLEncoder.encode(msg,"UTF-8");
System.outprintln(msg);
//解密
msg = URLDecoder.decode(msg,"UTF-8");
System.out.println(msg);
5.修改Cookie指定名的value值.

方式1:根据name获取被修改的Cookie对象,再调用setValue方法既可.

方式2:重新创建一个同名的Cookie.

注意:修改之后,要调用response对象.addCookie(c);

6.Cookie的生命周期:(Cookie中的共享数据可以保存多久)
缺省的情况:关闭浏览器就丢失了.
通过Cookie对象的setMaxAge(int seconds):设置Cookie可以存活多久.

seconds>0:可以存活多少秒.

seconds<0:存放在浏览器进程中,关闭浏览器Cookie就丢失了.

seconds=0:删除Cookie.

7:删除Cookie:

Cookie对象.setMaxAge(0);

8):Cookie的路径和域范围:
Cookie的路径:
Cookie对象.setPath(String path):

若不设置,那么使用的存放CookieServlet资源名的相对路径:

LoginServlet("/cookie/login"):存放一个Cookie.

ListServlet("/list");

由LoginServlet跳转到ListServlet,就不会再请求中携带Cookie.
相当于此时:cookie.setPath("/cookie");

设置在整个应用中在请求的时候都会携带Cookie.
cookie.setPath("/");
不同应用/主机之间如何共享Cookie:
此时就得需要设置域.
很多网站都有二级域名(配置虚拟记住).

一级域名:www.baidu.com

二级域名:music.baidu.com,map.baidu.com,tieba.baidu.com

cookie.setPath("/");

cookie.setDomain(".baidu.com");
9):Cookie的缺陷.
1>:中文处理麻烦.
2>:多人共用同一台电脑,信息不安全.
3>:一个Cookie只能存储一个简单类型的数据.

若要同时存储,账号,密码,邮件等等.
主要的原因是:Cookie的value只能存储String,不能存Object.

4>:Cookie的大小和数量限制:

Cookie大小限制在4KB之内;

一台服务器在一个客户端最多保存20个Cookie;

一个浏览器最多可以保存300个Cookie;

5>:Cookie的原理:把共享数据存储在浏览器中.

每次请求,再把共享数据带到服务端.最好是把数据存放于服务端.
------>Session:

上一篇 下一篇

猜你喜欢

热点阅读