什么是会话跟踪技术
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可能包含多次请求和响应。
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一个浏览器,以便于在多次请求间共享数据。
我们知道:http协议是一种无状态的协议。多次请求之间的数据无法共享。每次浏览器向服务器发送请求,服务器都会将这个请求看作全新的请求。这是为了传输的效率所考虑的。那么为了解决一次会话中数据无法共享的问题,我们需要使用会话跟踪技术。
实现方式:
客户端cookie和服务器端session
Cookie的基本使用
Cookie:客户端会话技术,将数据保存到客户端,以后每次请求携带cookie数据进行访问。
Cookie原理
Cookie是基于http协议实现的
响应头:set-cookie
请求头:cookie
Cookie使用细节:
Cookie存活时间:
默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,Cookie被销毁。
setMaxAge(int seconds):设置Cookie的存活时间。
1、正数:将Cookie写入电脑的硬盘中,持久化存储,到时间自动删除。
2、负数:默认值,Cookie存储在浏览器内存中, 当浏览器被关闭,Cookie被销毁。
3、零:删除对应的Cookie。
cookie不可以存储中文:
想要存储中文,我们可以将中文转换成url格式,再需要的时候解码回来。
String value="小明";
//编码
String tem=URLEncoder.encode(value,"UTF-8");
//解码
URLDecoder.decode(tem,"UTF-8");
Session使用细节:
服务端会话跟踪技术:将数据保存到服务端。
JAVA EE提供HttpSession接口,来实现一次会话多次请求间数据共享功能。
使用:
1、获取Session对象
HttpSession session=request.getSession();
2、session对象的功能
存储数据到session域中
void setAttribute(String name,Object o);
根据key,获取值
Object getAttribute(String name);
根据key,删除获得键值对
void removeAttribute(String name);
Session原理
Session是基于cookie实现的。
客户访问服务器获取session对象,每一个session都有一个唯一的id标识,只要你访问了session,服务器会自动的将session的id变做一个cookie发送给浏览器。
下一次浏览器访问服务器时,服务器监测到cookie包含session的id,会去寻找是否有这个id对应的session,没有的话会创建对应的session。
Session使用细节:
Session钝化和活化:
服务器重启后,Session中的数据是否还存在?
钝化:在服务器正常关闭后,Tomcat会自动的将Session数据写入硬盘的文件中。
活化:再次启动服务器时,从文件中加载数据到session中。
Session的销毁:
默认情况下三十分钟会自动销毁。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
调用Session对象的invalidate()方法可以立即销毁Session。
总结
cookie通常用来登陆验证这些操作,而session则时登陆以后的操作。