一、两者的特点
会话数据放在浏览器端,数据类型只能string,而且有大小限制的,相对数据存放不安全。
cookie的数据类型一定是字符串,如果要发送中文,必须先对中文进行URL加密才可以发送。
setPath(path): 修改cookie所在的有效路径。 如果把该cookie设置到某个有效路径下,然后当浏览器访问这个有效路径的时候,才会携带cookie数据给服务器。
setMaxAge(整数) : 设置cookie的有效时间
正整数: 表示超过了正整数的数值的时间,cookie就会丢失!!(cookie保存浏览器的缓存目录)单位:秒 负整数: 表示如果浏览器关闭了,cookie就会丢失!(cookie保存浏览器内存) 0 : 表示删除同名的cookie
- cookie可以有多个,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
2.session中应注意的细节
会话数据放在服务器端(服务器内存),占用服务器资源,数据类型任意类型,没有大小限制的,相对安全
session的原理
1)服务器创建Session对象,服务器会给这个session对象分配一个唯一的标记JSESSIONID
2)把JSESSIONID作为Cookie发送给浏览器
3)浏览器得到JSESSIONID保存下来,在下次访问时携带这个JSESSIONID去访问服务器
4)服务器得到JSESSIONID,在服务器内存中搜索是否存在指定JSSESSINOID的session对象,
5)如果找到,则返回这个session对象
6)如果找不到,可能直接返回null,或者再创建新的session对象。
HttpSession session = request.getSession();
二、两者常用的方法
1.cookie常用的方法
创建Cookie对象,用于存储会话数据
new Cookie(java.lang.String name, java.lang.String value)
修改Cookie对象
void setPath(java.lang.String uri)
void setMaxAge(int expiry)
void setValue(java.lang.String newValue)
把cookie数据发送给浏览器保存
response.addCookie(cookie);
- 服务器接收cookie信息
request.getCookies();
2.session常用的方法
创建HttpSession对象,用于保存会话数据
session = request.getSession(); //创建或获取session对象
修改HttpSession对象
void setMaxInactiveInterval(int interval) //设置session对象的有效时间
void invalidate() //手动销毁session对象
保存会话数据(作为域对象)
session.setAttribute("name",Object); //保存数据
session.getAttribute("name") //获取数据
session.removeAttribute("name") //删除数据