会话:浏览器和服务器之间的多次请求和响应
为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务器结束(关闭浏览器、到了过期时间)。这期间产生的多次请求和响应加在一起就称之为浏览器和服务器之间的一次会话.
会话过程中所产生的一些数据,可以通过会话技术( Cookie 和 Session )保存。
Cookie:客户端会话管理技术
把要共享的数据保存到客户端。
每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享!
**Session:**服务器端会话管理技术
本质也是采用客户端会话管理技术。
只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。
每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!
Cookie方法:
添加:HttpServletRseponse
方法名作用Cookie(String name,String value)构造方法创建对象属性对应的set和get方法赋值和获取值数量限制
每个网站最多只能有 20 个 Cookie,且大小不能超过 4KB。所有网站的 Cookie 总数不能超过 300 个。
l名称限制
Cookie 的名称只能包含 ASCCI 码表中的字母、数字字符。不能包含逗号、分号、空格,不能以 $ 开头。
Cookie 的值不支持中文。
存活时间限制 setMaxAge() 方法接收数字
负整数:当前会话有效,浏览器关闭则清除。
0:立即清除。
正整数:以秒为单位设置存活时间。
访问路径限制
默认路径:取自第一次访问的资源路径前缀。只要以这个路径开头就能访问到。
设置路径:setPath() 方法设置指定路径。
HttpSession:服务器端会话管理技术
本质也是采用客户端会话管理技术。
只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。
每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!
是 Servlet 规范中四大域对象之一的会话域对象。
作用:可以实现数据共享
域对象功能作用ServletContext应用域在整个应用之间实现数据共享ServletRequest请求域在当前的请求或请求转发之间实现数据共享HttpSession会话域在当前会话范围之间实现数据共享lHttpSession 实现类对象是通过 HttpServletRequest 对象来获取。
返回值方法名说明HttpSessiongetSession()获取HttpSession对象HttpSessiongetSession(boolean create)获取HttpSession对象,未获取到时否自动创建req.getSession():判断是否有JESSIONID的钥匙,有的话找到钥匙对应的session,将钥匙获取出来存到客户端浏览器中
浏览器禁用 Cookie
方式一:通过提示信息告知用户,大部分网站采用的解决方式。(推荐)
方式二:访问时拼接 jsessionid 标识,通过 encodeURL() 方法重写地址。(了解)
钝化和活化
什么是钝化和活化
钝化:序列化。把长时间不用,但还不到过期时间的 HttpSession 进行序列化,写到磁盘上。
活化:相反的状态。
何时钝化
第一种情况:当访问量很大时,服务器会根据 getLastAccessTime 来进行排序,
对长时间不用,但是还没到过期时间的 HttpSession 进行序列化。
第二种情况:当服务器进行重启的时候,为了保持客户 HttpSession 中的数据,也要对其进行序列化。
注意
HttpSession 的序列化由服务器自动完成,我们无需关心。