Cookie
是一种在客户端存储数据的缓存技术,原理是通过服务器将数据响应到客户端时,将数据存储到客户端的本地文件中。
工作原理
- 首先浏览器向服务器发起请求;
- 服务器就会根据当前会话生成一个Cookie对象(默认保存会话ID),并且把数据保存在该对象内;
- 然后把该Cookie对象放在响应头,一并发送回客户端浏览器;
- 浏览器接收服务器响应后,将Cookie保存在浏览器端;
- 当下一次浏览器再次访问那个服务器,就会把这个Cookie放在请求头内一并发给服务器。
- 服务端从请求头中获取Cookie信息,并作出相应的处理
//cookie不能直接存储中文,所以需要转码
json = URLEncoder.encode(json,"utf-8");
//创建cookie
Cookie c= new Cookie("user",json);
//cookie最大有效时间,以秒为单位。默认有效期更session一致
c.setMaxAge(60*60*24);
//设置作用域(域名,允许其他不同的项目访问当前cookie)
// c.setDomain("www.baidu");
//设置当前服务器下的哪些项目可以访问
// c.setPath("*");
//通过response对象将cookie信息发送到客户端
response.addCookie(c);
session
servlet是用来维持客户端与服务器的会话,存储在服务器中,存储数据小,一般用来存用户等信息。
session对象常用的方法
方法 | 描述 |
---|---|
public Object getAttribute(String name) | 返回session对象中与指定名称绑定的对象,如果不存在则返回null |
public Object setAttribute(String name,String value) | 得到session对象中与指定名称绑定的对象的值 |
Session与Cookie区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- 从安全角度来看存储在服务端的数据相对存储在客户端的数据更安全,因此安全方面session会高于cookie。
- session会占用服务器内存空间,在大量客户端访问服务器时session数会随之增多,因此如果存储大量数据到session中将会直接影响服务器性能;而cookie存储在客户端,可以通过cookie分担session的压力。
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
- 可以考虑将登陆信息等重要信息存放到session,其他信息如果需要保留(比如浏览记录信息,购物车等缓存数据),可以放在cookie中。