Session会话技术

什么是Session?

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的Session对象。由于Session为用户浏览器独享,所以各个用户在访问Web浏览器的资源时,可以把各自的数据放在各自的Session中,当用户再去访问服务器中的其他Web资源时,其他Web资源再从服务器存储的用户Session中获取数据并为用户服务。

Session的工作原理

客户端在第一次请求服务器时,服务器端会创建一个 Session 对象,用于存储客户端信息,每个 Session 对象都有唯一的 SessionID ,以区别于其他客户端,同时服务器端还会创建个 Cookie ,并且该 Cookie 中有一对键值对 name = JSESSIONID , value = SessionID 。然后在响应客户端的请求时将该 Cookie 发送给客户端,至此客户端就有了与服务器端一一对应的值,即 SessionID 与 JSESSIONID
客户端在第二次请求服务器时,服务器端会从客户端请求信息的 Cookie 中获取 JSESSIONID ,并与服务器端的 Session 的 SessionID 进行匹配,如果匹配成功,就说明该客户端不是第一次访问,然后可以继续跟踪用户会话数据。通过 Session 技术可以实现用户的自动登录,购物车等功能。


在 JSP 页面中可以直接通过隐式对象 session 来使用 Session 对象,在 Servlet 中可以通request.getSession()方法获取Session对象。

Session对象本身就是一个域对象,这样就可以在域对象中存储会话数据。

Session的应用

HttpSession类API

Session会话技术_第1张图片

保存Session会话中的数据
//获取session
HttpSession session = request.getSession();
//设置最长访问间隔时间,单位为秒
session.setMaxInactiveInterval(60*60*24);
//将会话数据保存到Session对象的域中
session.setAttribute("username",username);

获取Session会话中的数据
// 获取HttpSession对象
HttpSession session = request.getSession();
// 通过属性名获取属性值
String username = (String)session.getAttribute("username");
// 输出属性值
System.out.println(username);
删除Session会话中的数据
// 获取HttpSession对象
HttpSession session = request.getSession();
// 通过属性名删除会话数据
session.removeAttribute("username");

注意:如果要删除Session对象域中的所有会话数据,也可以调用invalidate()方法将所有的Session对象清除。当Tomcat服务器会话超时(默认30min),服务器端也会清除Session对象的会话数据

Session 和 Cookie区别

Session 和 Cookie 的主要区别如下所述。
(1) Session 数据保存在服务器端; Cookie 数据保存在客户端。
(2) Session 可以保存任何对象; Cookie 只能保存字符串对象。
(3) Session 较安全; Cookie 不安全,且不能存储敏感数据,需对保存的数据进行加密处理。
(4) Session 默认过期时间为30min; Cookie 默认过期时间为在关闭浏览器后。
(5) Session 适合保存客户状态; Cookie 适合保存持久化的数据状态。

Session和Cookie优缺点

Cookie的优点在于服务器承担的压力较小,缺点是安全性比较低,而且只能存储字符串。

Session是服务器端的会话技术,Session的优点是安全性比较高,并且Session可以存储任何类型的数据,缺点是运用Session的技术,服务器会承担更大的压力。

你可能感兴趣的:(JavaWeb,服务器,前端,java,tomcat,开发语言)