目录
一.什么是会话技术?
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。所以就有了客户端的会话技术cookie,和服务端的会话技术Session,在一次会话的范围内,共享数据。
二.什么是Cookie?
Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
所以Cookie是由服务器生成,在服务器的响应头中,客户端在请求头以此作为凭证作为一次会话的状态或者标记。
1 使用步骤
1).创建Cookie,绑定数据
Cookie cookie=new Cookie(name, value);
2).发送Cookie对象
response.addCookie(cookie);
3).获取Cookie
request.getCookies();
2.Cookie的细节
1)一性是否可以发送多个Cookie?
答案当然是可以的。
2)Cookie的存活时间?
a.默认情况下,当浏览器关闭后,内存被释放了,Cookie数据即被销毁,
b.通过setMaxAge(in seconds),持久化到本地,当参数大于0,则将数据写到硬盘上,参数默认是负数,也就是上面的情况,当参数等于0时,则是删除Cookie信息
3)Cookie能不能用中文?
tomcat8之前是不能直接存放中文数据的,需要通过URL编解码才能传输
4)Cookie的共享问题。
a.同一个服务器的不同项目,默认情况下,各项目间不能共享,如果设置共享通过setPath("/")来共享同一个服务器的所有项目。
b.不同的服务器同Cookie的共享问题,可以同过setDomain(String path),如果设置一级域名相同,那么多个服务器之间的cookie可以共享,比如setDomain(“baidu.com”),这样tieba.baidu.com和news.baidu.com可以共享。
3.Cookie的特点和作用
特点:
1)cookie存储在客户端浏览器
2)浏览器对於单个Cookie的大小是有限制(4kb)一级同一个域名下的总cookie数量也有限制(20个)
作用:
1)一般用于存储少量不太敏感数据
2)在不登录的情况下,完成服务器对客户端做身份做识别
三.什么是Session?
1.概念
服务器端的会话技术,在一次会话中多次请求间共享数据,将数据保存在服务器的对象中也就是HttpSession
2.Session的基本使用
1)获取Session对象
HttpSession session = request.getSession();
session.getAttribute("msg");
2)使用Session对象
session.setAttribute("msg", "ts");
session.removeAttribute("msg");
3.服务器如何确保在一次会话中多次获取的Session一致性?
session是依赖于cookie的,在第一次会话开启的时候,是没有session的,会在内存中创建一个session,在响应时会将创建的session的sessionId,放在cookie的头,在下一次访问时,将ssionid带过来,在去内存中去找Session,所以才能保证唯一性。
4.Session的细节
1)客户端关闭后,服务器不关,两次获取的Session是否为一个?
默认情况下,是不一个,因为一次会话已经结束了,如果希望一致的话,则通过Cookie设置JSESSIONID将id设置下去,这样就可以为一个了Cookie c=new Cookie(“JSESSIONID”,session.getId()),c.setMaxAge();
2)客户端不关,服务器关闭,两次获取的Session是否为一个?
默认情况下不是一个,但是要确保数据不丢失
session的持久化?session的反序列化?这些操作Tomcat服务器帮我们已经做过了。正常关闭后会在work中生成一个Session.zip,重启后会重新反序列化,并删除数据
3)Session的失效时间
session.invalidate();会将session删除,默认时间是30分钟,也可以在web.xml中添加session-config中配置
5.session的特点
1)session是用于存储一次会话的多次请求的数据,存放在服务端
2)session可以是任意类型,任意大小的数据
四.Session和Cookie的区别
1.存放位置
Session是服务端,Cookie是在客户端
2.数据大小
Cookie有大小限制,Session没有
3.安全性
Session相对于Cookie安全,毕竟存在于服务器中。