① Cookie在服务端创建 Cookie cookie = new Cookie(name,value);
② Cookie是保存在浏览器这端 response.addCookie(cookie);
③ Cookie的生命周期可以通过cookie.setMaxAge(int second)来设置 Cookie默认生命周期是会话级别(即存储在浏览器的内存中) 如果没有设置setMaxAge()则该cookie的生命周期当浏览器关闭时就挂了,setMaxAge(0) +response.addCookie(cookie),相当于删除Cookie 此时如果cookie文件内部只有该Cookie则,文件也一并删除;否则只删除该Cookie
④ Cookie可以被多个浏览器共享
⑤ 一个web应用可以保存多个cookie(放置在同一个文件内部) ,最多不要超过20个,每个Cookie的大小限制为4kB,因此Cookie不会塞满你的硬盘更不会被作为"拒绝服务"的攻击手段。浏览器一般保存的Cookie不会超过300个
⑥ Cookie存放中文,出现的乱码问题 存放String val = java.net.URLEncoder.encode("中文名称","utf-8"); Cookie cookie = new Cookie("name","val"); 读出 String val = java.net.URLDecoder.decode
(cookie.getValue("name"),"utf-8"); out.println("name="+val)
session小结:
① Session是存放在服务器的内存中
② 一个用户浏览器,独享一个session域对象
③ Session中的属性的默认生命周期是30min,可以通过web.xml来修改
④ Session中可以存放多个属性(包括对象)
⑤ 如果session.setAttribute(name,value);中name相同,则会替换掉。
Session VS Cookie :
1.存储位置不同: Cookie存在在客户端(临时文件夹) Session存在服务器内存中,一个session域对象为一个用户浏览器服务
2.安全性: Cookie以明文方式存放在客户端,安全较弱,可以通过MD5加密算法在存放 Session存放在服务器端内存中,所以安全性较好
3.网络传输量: Cookie会传递信息给服务器 Session的属性值不会给客户端
4.生命周期: Cookie的声明周期是累计时间 Session的生命周期是访问session的间隔时间,在一些情况下session也会失效关闭tomcat,reload web应用,时间到,调用invalidate()[安全退出]
5.从访问范围 :Session为一个浏览器独享 Cookie为多个用户浏览器共享 因为session会占用服务器的内存,因此不要向session存放过多、过大的对象,会影响性能。