一.什么是会话技术?
当用户通过浏览器访问web应用时,通常状态下,服务器需要对用户状态进行跟踪,会话技术就是浏览器跟踪用户信息的技术。
它是指一个客户端(浏览器)与web服务器之间连续发生的一系列请求和响应的过程,比如用户在网站商品结算时,web服务服务器必须根据请求用户的身份找到该用户所购买的商品。在客户端和服务器交互的过程中也会产生一些数据。为了保存会话中产生的数据。Serverlet提供了两个用于保存会话数据的对象。分别是Cookie和Session。
会话: 一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器发送请求时,会话建立,直到有一方断开为止。
会话和会话技术的功能:在一次会话的范围内的多次请求间来共享数据。
二.会话技术的方式:
1.客户端会话技术:Cookie
2.服务器端的会话技术:Session
三.Cookie对象
客户端会话技术。Cookie可以将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器更好的交互。
Cookie快速入门:
1.创建Cookie对象,绑定数据。
new Coookie(String name,String value)
2.发送Cookie对象。
respose.addCookie(Cookie cookie)
3.获取Cookie,拿到数据。
Cookie[ ] request.getCookies()
实现原理:基于响应头set-cookie和请求头cookie实现。
四.Cookie的一些注意细节:
1.一次可不可以发送多个Cookie?
可以,可以创建多个Cookie对象,使用response调用多次addCookie方法去发送cookie即可。
2.Cookie在浏览器中保存多长时间?
*默认情况下,当浏览器关闭后,Cookie数据被销毁。
*持久化存储:使用函数 setMaxAge(int seconds)
正数--->将Cookie数据写到硬盘的文件中。持久化存储。并指定CooKie存活时间,时间到了之后,Cookie的文件自动失效。
负数--->默认值。
零--->删除掉cookie的信息。
3.Cookie能不能存储中文?
在Tomcat 8之前 cookie中是不能直接存储中文数据的。如果需要存储,需要将中文数据转码----一般采用URL编码(%E3)
在Tomcat 8之后,cookie支持中文数据。
4.Cookie共享问题?
1.假设在一个Tomcat服务器中,部署了多个web项目,那么在这些项目中cookie能不能共享?
- 默认情况下cookie不能够共享
- setPath(String Path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录,如果需要共享,则可以将path设置为“/”
2.不同的Tomcat服务器间cookie的共享问题
- setDomain(String Path):如果设计一级域名相同,那么多个服务器之间cookie可以共享。
- 比如setDomain(".baidu.com") 那么tieba.baidu.com和news.baidu.com中的cookie就可以共享啦。
五.Cookie的特点和作用
特点:
cookie存储数据在客户端浏览器。
浏览器对单个cookie大小有限制(4kb),而且对同一个域名下的cookie总数量也有限制(20个)。
作用:
cookie一般用于存储少量的不太敏感的数据。
在不登录的情况下完成服务器对客户端的身份的识别。
六.Session对象
服务器端的会话技术。Session可以在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
Session快速入门:
1.获取HttpSession对象:
HttpSession session =request.getsession( );
2.使用HttpSession对象:
object getAttribute(String name)
void setAttribute(String name, object value)
void removeAttribute(String name)
服务器如何确保,在一次会话中,多次获取的session对象是同一个???
原因:Session是依赖于Cookie的!服务器是通过Cookie来确保在一次会话中多次请求获取的session对象是同一个。
原理:Session是依赖于Cookie的!
七.Session的一些小细节:
1.当客户端关闭之后,服务器不关闭,两次获取的session是否为同一个?
默认情况下,不是。
如果需要相同,则可以创建cookie,键为JSESSIONID,设置最大存活时间,让Cookie持久化保存。
2.客户端不关闭,服务器关闭后,两次获取的session是否为同一个?
不是同一个。但是要确保数据不丢失。就要用到session的钝化和session的活化。
session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上
session的活化:在服务器启动之后,将session文件转化为内存中的session对象即可。
3.Session的失效时间(什么时候被销毁)?
- 服务器关闭
- session对象调用invalidate()
- session默认失效时间 30分钟。可以在xml自行配置
4.Session的特点
- session可以用来存储一次会话的多次请求的数据,存在服务器端。
- session可以存储任意类型,任意大小的数据。
八.Session和Cookie的区别:
- Session存储数据在服务端,Cookie存储数据在客户端。
- Session没有数据大小的限制,Cookie有数据大小的限制。
- Session数据安全,Cookie相对于来说不安全。