Cookie和Session小知识
Cookie和Session小知识
一、会话技术
1、概念
浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开连接便结束会话,一次会话中可以包含多次请求和响应。
2、功能
一次会话的范围内可以进行多次请求和响应,会话过程中共享数据。
3、方式
(1)客户端会话技术:Cookie
(2)服务器端会话技术:Session
二、Cookie
1、概念
客户端会话技术,服务器给客户端,将数据保存到客户端
2、使用流程
(1)创建Cookie对象,绑定数据
new Cookie(String name, String value)
(2)发送Cookie对象
response.addCookie(Cookie cookie)
(3)获取Cookie数据
Cookie[] request.getCookies()
3、实现原理
基于响应头set-cookie和请求头cookie实现
4、生命周期
(1)默认情况下,当浏览器关闭后,Cookie数据被销毁
(2) 持久化存储:
setMaxAge(int seconds)
正数:将Cookie数据持久化存储写到硬盘的文件中, 并指定cookie存活时间
负数:默认值
零:删除cookie信息
(3)具体实例
cookie.setMaxAge(0); //设置立即删除
cookie.setMaxAge(100); //100 秒
5、存储中文
中文数据用URL编码,不支持特殊字符
6、访问路径
//用于指定只有请求了指定的域名,才会带上该cookie
cookie.setDomain(".csdn.com");
//只有访问该域名下的xxx的这个路径地址才会带cookie
cookie.setPath("/xxx");
7、共享问题
(1)同一个tomcat服务器中多个web项目
默认情况下cookie不能共享
setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
如果要共享,则可以将path设置为"/"
(2)不同tomcat服务器间
setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
setDomain(".csdn.com"),那么1111.csdn.com和222.baidu.com中cookie可以共享
8、注意
(1)cookie存储数据在客户端浏览器
(2)浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
三、Session
1、概念
HttpSession,服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
2、常用方法
(1) 获取HttpSession对象:
HttpSession session = request.getSession();
(2) 使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
String id = session.getId() //获得session会话ID
session.invalidate() //强制删除数据
3、生命周期
(1)服务器关闭时销毁
(2) invalidate()方法
(3) 默认失效时间为30分钟
4、注意事项
(1) 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下,不是。
如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c)
(2)客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失。
tomcat自动完成以下工作
session的钝化:
在服务器正常关闭之前,将session对象系列化到硬盘上
session的活化:
在服务器启动后,将session文件转化为内存中的session对象
5、特点
(1) session用于存储一次会话的多次请求的数据,存在服务器端
(2) session可以存储任意类型,任意大小的数据
四、session与cookie区别
1、session存储数据在服务器端,cookie在客户端
2、session无数据大小限制,cookie具有数据大小限制
3、session数据安全,Cookie相对于session不安全(存储于客户端)