一、HttpSession的介绍
1.1、HttpSession 服务端的技术
服务器会为每一个用户 创建一个独立的HttpSession
1.2、HttpSession原理
当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Session
并且生成一个SessionID,这个SessionID在响应浏览器的时候会被装进cookie中,从而被保存到浏览器中
当用户再一次访问Servlet时,请求中会携带着cookie中的SessionID去访问
服务器会根据这个SessionID去查看是否有对应的Session对象
有就拿出来使用;没有就创建一个Session(相当于用户第一次访问)
1.3.域的范围:
Context域 > Session域 > Request域
Session域 只要会话不结束就会存在 但是Session有默认的存活时间(30分钟)
二、Cookie
2.1、Cookie机制
- 理论上讲,一个用户的所有的请求都属于同一个会话,不能与其他的用户混淆,如A加入到购物车的商品不能出现在B的购物车内。
- 然而实际上,Web应用使用HTTP协议传输数据,而HTTP属于无状态协议,一旦数据交换完毕就会断开连接,也就意味着无法从连接上跟踪会话。
2.2、什么是Cookie?
Cookie实际上是一小段文本,其工作原理是,如果服务端需要记录一段信息,就是要response想浏览器发送一段Cookie,客户端保存,浏览器在发送请求时会将URL连同Cookie一起发送给服务器,这样服务器就可以通过它来确认客户身份。
2.3、服务器操作Cookie
//javax.servlet.http.Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie
request.getCookie();//获取客户端提交的所有的Cookie,返回Cookie[]
resopnse.setCookie();//向客户端发送Cookie
2.4、Javascript操作Cookie
<script>document.write(document.cookie);</script>
三、Session
3.1、Session机制
Session是服务端记录客户端状态的机制,使用简单,但是增加了服务器的存储压力。Session机制决定了当前客户只会获取到自己的Session,而不会获取到别人的Session。各客户的Session也彼此独立,互不可见。
3.2、什么是Session
客户端访问服务器时,服务器会通过session的方式将信息保存下来,当客户端再次访问服务器时,只需要检查服务器中Session的状态就可以了。为了高效的存储速度,服务器会把Session存储到内存中,每个用户有一个独立的Session,如果Session过于复杂,那么再大量用户访问的情况下可能存在内存溢出。
3.3、服务器操作Session
//javax.servlet.http.HttpSession。每个来访者对应一个Session对象,Session对象是在客户端第一次请求服务器的时候创建的
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
session.getAttribute("loginTime"); // 获取Session属性
3.4、Session的生命周期
Session在第一次访问服务器的时候就创建了,创建之后 ,用户继续访问就会刷新最后访问时间,此时服务器会认为该Session活跃了一次。
3.5、Session的有效期
服务器会把长时间没有活跃的Session从内存删除,这个时间就是Session超时时间maxInactiveInterval,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改,也可以在web.xml中修改。
另外,通过调用Session的invalidate()方法可以使Session失效。
Tomcat中Session的默认超时时间为20分钟。通过setMaxInactiveInterval(int seconds)修改超时时间。可以修改web.xml改变Session的默认超时时间。例如修改为60分钟:
<session-config>
<session-timeout>60</session-timeout> <!-- 单位:分钟 -->
</session-config>
注意:参数的单位为分钟,而setMaxInactiveInterval(int s)单位为秒。
四、Session与Cookie的关系
Session依赖于Cookie,Cookie是客户端的绘画技术,而Session是服务器端的绘画技术,每当调用getSession()方法时,创建一个降维jsessionid的cookie
五、服务器三大组件
监听器、过滤器、Servlet
六、常用方法
- 设置请求的编码: request.setCharacterEncoding()
- 设置响应的编码: response.setCharacterEncoding()