Cookie会话技术
一次会话中包含多次请求和响应
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
功能
在一次会话的范围内的多次请求间,共享数据
方式
Cookie
客户端会话技术
Java
1.创建Cookie对象,绑定数据
new Cookie(String name,String value)
2.发送Cookie对象
response.addCookie(Cookie cookie)
3.获取Cookie,拿到数据
Cookie[] request.getCookie()
实现原理
Java
基于set_cookie和请求头cookie实现
细节
1.可以一次发送多个cookie
创建多个Cookie对象,使用response调用调用多次addCookie方法
2.设置保存时间
默认值:当浏览器关闭后,Cookie数据被销毁
持久化:
setMaxAge(int seconds)
1.正数:将Cookie数据写到硬盘的文件中,持久化存储,cookie存活时间
2.负数:默认值
3.零:删除cookie信息
3.存储中文
在tomcat8 之前cookie不支持中文存储
需要使用URL编码
URLEncoder.encode(转码字符串,"utf-8")
获取值,同样需要解码
URLDecoder.decode("解码字符串","utf-8")
//注意:特殊字符最好使用URL编码
tomcat8 之后支持中文存储
4.获取范围
默认情况是只能共享在同一个项目下的cookie
可以设置范围来进行不同项目下的共享
setPath(String path)
设置为"/"
5.cookie值
尽量不要使用空格等特殊字符
Session
服务端会话技术
在一次会话的多次请求将共享数据,将数据保存在服务器端的对象中 HttpSession
使用
java
获取HttpSession对象
HttpSession session = request.getSession()
//有点类似与共享数据
使用对象
void setAttribute(String name, Object obj) //存储数据 name:存储数据的名字 obj:存储对象
Object getAttribute(String name) //根据存储数据的名字来获取存储数据
void removeAttribute(String name) //通过名字来移除存储数据
原理
Session的实现是依赖于Cookie的
其他
1.当客户端关闭后,服务器不关闭,2次获取session是否是同一个
java
默认情况下: 不是
如果需要,则可以创建一个Cookie 键为JSESSIONID 值就是之前的值,调用get方法,获取值,设置存活时间
Cookie c = new Cookie("JSESSIONID",session.getId())
2.客户端不关闭,服务器关闭后,2此获取的session是同一个吗?
java
不是同一个对象,但是为了确保数据不丢失,tomcat自动设置
1.session钝化
在服务器正常关闭之前,将session对象系列化到硬盘上
(类似序列化)
2.session活化
在服务器启动后,将session文件转化成内存中的session对象
(类似反序列化)
//注意 idea 无法实现活化功能,因为idea会在项目部署的时候,替换掉原来的文件,因此session文件被删除了
3.session销毁时间
Java
1.服务器关闭
2.session对象调用invalidate()方法时
3.session默认失效时间30分钟(可以去配置文件里修改)
4.session的特点
1.session用于存储一次会话的多次请求的数据,存在服务器端
2.session可以存储任意类型,任意大小的数据
区别
1.session存储数据在服务器端,cookie在客户端
2.session没有数据大小的限制,cookie有
3.session数据安全,cookie相对不安全