• 会话技术——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.在不登录的情况下,完成对身份的识别
  • 相关阅读:
    python--------------内置函数
    下载文件的一致性验证之MD5值校验
    MySQL最大连接数设置
    Jenkins构建次数设置
    Linux(CentOS7)安装zip、unzip命令
    如何在CentOS 7上安装Munin
    Intellij IDEA14 搜索框及控制台乱码解决
    IDEA测试结果查看
    IDEA运行TestNG报错rg.testng.TestNGException: org.xml.sax.SAXParseException;
    intellij idea 注释行如何自动缩进
  • 原文地址:https://www.cnblogs.com/linjing111/p/12794281.html
Copyright © 2020-2023  润新知