Servlet(六)Cookie对象

简介

  • Cookie是服务器提供的一种技术,通过服务器的程序将一些只须存放在客户端,或者在客户端进行处理的数据,放在本地的计算机上,不需要网络传输,提高网页处理效率,降低服务器荷载。
  • 由于Cookie是服务端保存在客户端的信息,其安全性也是很差的,常见的记住密码就是Cookie实现。
  • 大小(4KB)
  • 专门操作Cookie的类,javax.servlet.http.Cookie 随着服务器端的响应发送给客户端,保存在浏览器。当下次访问服务器时把Cookie带回服务器。

Cookie对象的创建与发送

@WebServlet("/Coo1")
public class Cookie01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取Cookie对象
        Cookie cookie = new Cookie("uname","admin");
        // 响应Cookie
        resp.addCookie(cookie);
    }
}

在这里插入图片描述

Cookie对象的获取

  • 在服务端提供了一种getCookie()方法,用来获取客户端回传的所有Cookie对象组成的一个数组
  • Cookie源码
    在这里插入图片描述
  • 获取Cookie
      Cookie[] cookie = req.getCookies();
           for (int i =0;i<cookie.length;i++){
               System.out.println(cookie[i].getName()+"  "+cookie[i].getValue());
           }
    

Cookie设置到期时间

  • Cookie默认存活时间是-1,(关闭浏览器即失效);设置为正数,以秒为单位;
  • 到期时间的设置
    • 正整数:表示存储的秒数
    • 负整数:旨在浏览器中存活,浏览器关闭就失效
    • 零: 表示删除Cookie(因为Cookie中没有提供删除方法,以此值表示删除方法)
    • 设置方法 setMaxAge()

Cookie注意点

  • Cookie保存在当前浏览器中,不能跨浏览器
  • Cookie中不能直接存中文,中文需要通过 URLEncoder.encode() 方法进行编译; URLDecoder.decode()来进行解码
  • 如果服务端发送重复的Cookie那么会覆盖原有的Cookie
  • 存放Cookie数量有上限(同一个域名下)
  • Cookie在同域名和同路径下,出现相同name属性,会覆盖
  • 存中文时报错
    在这里插入图片描述
/**
 * Cookie中文问题
 * Cookie在同域名和同路径下,出现相同name属性,会覆盖
 */
@WebServlet("/Coo3")
public class Cookie03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = "谈";
        String pwd = "韵";
        String user_name = URLEncoder.encode(name);
        String user_pwd = URLEncoder.encode(pwd);
        Cookie cookie = new Cookie(user_name,user_pwd);
        resp.addCookie(cookie);

    }
}

Cookie 路径

  • Cookie 的setPath设置成cookie的路径,这个路径直接决定服务器的请求是否会从浏览器中加载某些cookie
  • 情景一 : 当前服务器下任何项目的任意资源都可获取Cookie对象
      	Cookie cookie = new Cookie(user_name,user_pwd);
        cookie.setPath("/");
        
        resp.addCookie(cookie);
    
  • 情景二:当前项目下的资源可获取cookie对象(默认不设置Cookie的path 或者 cookie.setPath("/项目名");)
  • 情景三:在指定项目下可获取Cookie对象(cookie.setPath("/项目名");)在该项目下可获得对象
  • 情景四:指定项目的资源下 (cookie.setPath("/项目名/资源名");)

总结

  • 当前访问路径包含Cookie的Path属性值时,能获取Cookie对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值