会话技术——Cookie

时间:2020-04-28
本文章向大家介绍会话技术——Cookie,主要包括会话技术——Cookie使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Cookie

1.什么是Cookie?
    Cookie是客户端技术,程序将每个用户的数据以Cookie的形式写给用户的各自浏览器,当用户使用浏览器去访问服务器中的web时,以后每次请求都会将之前保存的共享数据发送给服务器。
2.作用:
    实现会话跟踪
        *实现原理
        1.客户端发送请求给服务器
        2.服务器发送响应头set-cookie并携带数据给客户端
        3.客户端接收到响应头,并保存数据
        4.客户端会使用set-cookie数据带给服务器
        5.服务器获取消息头的数据
![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200428110532258-1896279847.png)

Cookie的操作

1.创建Cookie对象
Cokkie cokkie=new Cokkie(String name,String value)
*name: 当前Cookie取的唯一名字.
*value: 存储在Cookie的共享数据,只能是字符串类型.
Cookie cookie = new Cookie("currentName", "ZYGui");
1.把Cookie放入响应中,响应给浏览器,把共享的数据存储到浏览器中
    respond.addCookie(cookie)
2.获取Cookie及里面的数据
    Cookie [] cs=request.getCookie();
![](https://img2020.cnblogs.com/blog/1668748/202004/1668748-20200428111035690-2012506682.png)

3.修改Cookie中指定的属性名的属性值
    1.重新创建一个新的同名Cookie,覆盖之前的Cookie
    Cookie cookie=new Cookie(String name,String name)
    2.先获取之前的Cookie对象,然后调用setValue(String newValue)方法
        //注意:重新设定了Cookie值后需要重新将cookie再次发送给浏览器
    respond.addCookie(cookie)

4.操作Cookie的生命周期,默认是在关闭浏览器的时候销毁
    1.会话Cookie: 关闭浏览器之后,Cookie就销毁了. 缺省情况
    2.持久化Cookie: Cookie可以保存指定的时间段.
    3.设置Cookie的最大存活时间: cookie.setMaxAge(int seconds)
        seconds = 0: 删除Cookie;
        seconds < 0: 会话Cookie
        seconds > 0: 存储指定的秒数.
5.删除Cookie
    cookie.setMaxAge(0);
6.Cookie 中的key和value不支持中文
    1.先对中文字符进行编码
    Cookie ck=new Cookie("username",URLEncoder.encoder(username,"UTF-8"));
    2.获取之后在进行解码
    username=URLDecode.decode(value,"utf-8");

Cookie共享问题

1.Cookie的路径
    Cookie在创建时,会根据当前的Servlet相对路径来设定自己的路径
    比如Servlet类的路径/cookie/servlet ,相对路径未/cookie/
    问题:此时只会访问/cookie/下的资源才能发送给服务器
    解决方法:是指cookie路径:cookie对象.setPath(String url)
        表示当前应用中的所有资源都能够共享Cookie下的信息
    为什么要设置路径,当访问某些页面时,不希望携带cookie.此时就可以设置cookie的携带路径.
    路径写法: /项目名称, 所有项目中添加cookie,访问时都会携带.
    设置 /项目名称/p, 此时只访问/p时,才携带cookie,其他路径不携带.

2.域范围
    在多个应用之间实现数据共享,那么需要设置域范围,比如:
    news.baidu.com
    map.baidu.com
    *ck.setDomian("baidu.com")

Cookie的缺陷

1.获取Cookie麻烦
2.Cookie不支持中文(Tomcat8.0后支持中文)
3.Cookie存储有限
    一个浏览器对一个站点最多储存20kbCookie信息
    一个浏览器最多储存300Cookie信息
4.共享数据容易泄露,不安全
5.一个Cookie只能存储一个字符串类型
最好的解决方案: 将数据保存在服务端(Session)

Cookie的用处

1.存储少量且不敏感的数据
2.在不登录的情况下,完成对身份的识别

原文地址:https://www.cnblogs.com/linjing111/p/12794281.html