Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】(二)

简介: 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话.

Cookie保存中文

  • 上面我们的例子保存的是英文字符,下面我们来看下保存中文字符会怎么样。
response.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter = response.getWriter();
        String name = "中国";
        Cookie cookie = new Cookie("country", name);
        cookie.setMaxAge(2000);
        response.addCookie(cookie);
        printWriter.write("我颁发了一个Cookie,值保存的是中文数据");

访问Servlet1,好吧。出异常了!

5.jpg

  • 中文属于Unicode字符,英文数据ASCII字符,中文占4个字符或者3个字符,英文占2个字符。
  • 解决:Cookie使用Unicode字符时需要对Unicode字符进行编码。
 //对Unicode字符进行编码
        Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));

再次访问Servlet1,已经把Cookie成功颁发给浏览器了

6.jpg

7.jpg

我们发现Cookie保存在硬盘的中文数据是经过编码的,那么我们在取出Cookie的时候要对中文数据进行解码

 Cookie[] cookies = request.getCookies();
        for (int i = 0; cookies != null && i < cookies.length; i++) {
            String name = cookies[i].getName();
            //经过URLEncoding就要URLDecoding
            String value = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
            printWriter.write(name + "------" + value);
        }

取出存进Cookie的值

8.jpg

Cookie的有效期

Cookie的有效期是通过setMaxAge()来设置的

  • 如果MaxAge为正数,浏览器会把Cookie写到硬盘中,只要还在MaxAge秒之前,登陆网站时该Cookie就有效【不论关闭了浏览器还是电脑】
  • 如果MaxAge为负数,**Cookie是临时性的,仅在本浏览器内有效,关闭浏览器Cookie就失效了,Cookie不会写到硬盘中。Cookie默认值就是-1。这也就为什么在我第一个例子中,如果我没设置Cookie的有效期,在硬盘中就找不到对应的文件。
  • 如果MaxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie对应的方法,把MaxAge设置为0等同于删除Cookie

Cookie的修改和删除

  • 上面我们已经知道了Cookie机制没有提供删除Cookie的方法。其实细心点我们可以发现,Cookie机制也没有提供修改Cookie的方法。那么我们怎么修改Cookie的值呢
  • Cookie存储的方式类似于Map集合,如下图所示

9.jpg

  • Cookie的名称相同,通过response添加到浏览器中,会覆盖原来的Cookie
  • 以country为名保存的是%E4%B8%AD%E5%9B%BD,下面我再以country为名,把值改变一下

10.jpg

  String name = "看完博客就点赞";
        //对Unicode字符进行编码
        Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));

现在我要删除该Cookie,把MaxAge设置为0,并添加到浏览器中即可

 String name = "看完博客就点赞";
        //对Unicode字符进行编码
        Cookie cookie = new Cookie("country", URLEncoder.encode(name, "UTF-8"));
        //一定不要忘记添加到浏览器中
        cookie.setMaxAge(0);
        response.addCookie(cookie);
        printWriter.write("我删除了该Cookie");

访问Servlet,在硬盘已经找不到Cookie的文件了!

11.jpg

12.jpg

注意:删除,修改Cookie时,新建的Cookie除了value、maxAge之外的所有属性都要与原Cookie相同。否则浏览器将视为不同的Cookie,不予覆盖,导致删除修改失败

目录
相关文章
|
3月前
|
存储 搜索推荐 数据安全/隐私保护
Web 应用里 first party cookie 和 third party cookie 的区别
Web 应用里 first party cookie 和 third party cookie 的区别
39 0
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
1月前
|
数据采集 存储 安全
登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧
登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧
|
1月前
|
存储 安全 对象存储
Cookie和Session的区别:从原理到应用
【2月更文挑战第18天】
56 6
|
2月前
|
Java 应用服务中间件 API
深入解析Java Servlet技术在Web开发中的应用
深入解析Java Servlet技术在Web开发中的应用
213 1
|
2月前
|
存储 Java 应用服务中间件
JavaWeb----Servlet技术
JavaWeb----Servlet技术
325 0
|
3月前
|
数据安全/隐私保护
Session 管理以及Cookie 应用最简单实例
Session 管理以及Cookie 应用最简单实例
|
3月前
|
存储 前端开发 Java
会话技术, 掌握Cookie的使用 掌握Session的使用
会话技术, 掌握Cookie的使用 掌握Session的使用
36 0
|
3月前
|
存储 Web App开发 安全
PHP会话技术跟踪和记录用户?使用cookie会话你必须掌握
PHP会话技术跟踪和记录用户?使用cookie会话你必须掌握
37 0
|
3月前
|
存储 JSON 算法
登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)
登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)