本文共 1900 字,大约阅读时间需要 6 分钟。
今儿个聊一聊Cookie的一些入门知识点
进入正题前,先了解一下我们常用的四大域对象 域对象:能放数据,取数据,删除数据四大域:范围从大到小
域对象 | 域对象的作用范围 |
---|---|
ServletContext | 整个项目 |
(常用)HttpSession | 一次会话作用域有效 |
(常用)Request作用域 | 一次请求内有效 |
Page域 | 同一个页面有效 |
Cookie对象是HttpSession域对象中的一个分支
提到Cookie就离不开会话跟踪技术了 会话跟踪技术: 从第一次访问服务器开始,到关闭浏览器之间的整个过程,Session域的数据有效,每个用户有每个用户的Session Session的ID编号会存入客户端浏览器的Cookie 换句话说,Cookie每个浏览器都会有,但是Cookie是不能跨浏览器的,也就IE浏览器里的Cookie数据火狐浏览器,Chrome浏览器肯定是获取不到的好比你去一家A银行办卡存钱,你的账户信息B银行获取不到你的账户信息
Cookie有一些规范:
Cookie的大小上限4kb 一个浏览器最多保存300个Cookie 一个服务器最多再客户端浏览器上保存20个Cookie 补充说明:规范只作为了解,现在很多浏览器为了提高性能已经优化了这方面的一些限制了Cookie对象的方法:
构造:
Cookie(String name,String value)//Cookie的构造方法//如果创建的Cookie的key已经存在,新的Cookie会覆盖旧的//也就是说Cookie对象也是以key-value键值对的形式存储数据的
操作数据:
getValue() setValue()//获取或者修改Cookie的值getName()//拿到Cookie的namesetMaxAge(int expiry)//设置Cookie存放的时间,默认单位是秒//expriy=0:表示Cookie立即删除 //expriy=-1:该值是默认值,Cookie存在客户端内存,当浏览器关闭时,Cookie清除//expriy>0:即为该Cookie存放时间 //expiry=60 表示Cookie存放60秒,60秒后浏览器删除该Cookie
修改路径:
setPath()//设置Cookie访问的路径
访问路径问题
Cookie路径: Cookie如果没有设置路径,默认路径是 “/项目名”
举个栗子: 有三个Servlet类,路径分别如下 ACookie: /test BCookie: /test/servlet CCookie: /test/jsp 这三个Servlet能否互相访问内容? 我们先来看看他们各自的url路径http://locathost:8888/xx/test/AServlet http://locathost:8888/xx/test/servlet/BServlet http://locathost:8888/xx/test/jsp/CServlet
AServlet 只能访问ACookie
BServlet 访问ACookie和BCookie CServlet 访问ACookie和CCookieCookie的创建与使用
步骤://创建Cookie,Cookie不能存放中文 Cookie c=new Cookie("age","21"); Cookie c1=new Cookie("name","zs"); //给Cookie设置声明周期, 默认单位:秒 c.setMaxAge(7*24*60*60);//7天 //保存到客户端 response.addCookie(c); response.addCookie(c1);
编码/解码问题:
Cookie存放中文,需要将数据进行编码
方法:URLEncoder.encode()URLDeEncode.decode()
用法: String str="博客"; //编码 String url=URLEncoder.encode(str,"UTF-8"); //解码 String newStr=URLDecoder.decode(urlStr,"UTF-8");
补充说明:一般实际开发很少用到Cookie中转换为中文,因为中文在开发中还是存在很多未知的错误,这是其一
执行上述的代码发现,编码的"博客"长度很长占的空间比中文大,而"博客"在UTF-8中才占6个字节转载地址:http://huhrb.baihongyu.com/