前言:
此时我们对“如何获取session对象”大体比较重视,各位老铁们都需要了解一些“如何获取session对象”的相关文章。那么小编也在网上网罗了一些有关“如何获取session对象””的相关内容,希望朋友们能喜欢,小伙伴们一起来了解一下吧!HttpServletRequest请求对象中,提供了一个getSession()方法,可以获取到当前请求的会话对象,该方法返回一个HttpSession对象。什么是Session呢???
客户端(浏览器)向服务器(Servlet容器)发起HTTP请求的时候,这个过程就相当于是在打电话,我们把这个维持的过程叫做:会话Session。你可以将Session理解成是浏览器和服务器之间的一次交互过程。
默认情况下,Session的有效期是跟随着浏览器的运行周期的,也就是说,当客户端把浏览器关闭之后,这个Session就被销毁了。当然,我们也可以设置Session的有效时间,Tomcat容器中,默认的Session有效期是30分钟。
1.1、Session的优缺点(1)Session的优点Session保存在服务器端,数据更加安全。Session可以保存更多种类的数据类型。Session不存在大小的限制,只要内存空间足够,就可以保存数据。Session可以实现不同页面之间的数据共享。(2)Session的缺点Session需要占用内存空间。Session需要额外的存取机制来进行数据的管理。Session不适用于分布式的环境里面。Session不适用不同的域下的数据共享。1.2、获取Session数据
获取HttpSession对象很简单,只需要调用HttpServletRequest请求对象中的getSession()方法即可,该方法将返回一个HttpSession对象,如果不存在,则会创建一个新的HttpSession对象。
HttpSession对象中,提供了一个getAttribute()方法,可以用于获取Session会话中的数据。案例代码:
package com.gitcode.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;/** * @version 1.0.0 * @Date: 2024/2/12 9:53 * @Author ZhuYouBin * @Description: */public class SessionServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、获取 HttpSession 对象 HttpSession session = request.getSession(); // 2、从 Session 对象中获取数据 Object username = session.getAttribute("username"); System.out.println("username=" + username); }}1.3、设置Session数据
获取HttpSession对象很简单,只需要调用HttpServletRequest请求对象中的getSession()方法即可,该方法将返回一个HttpSession对象,如果不存在,则会创建一个新的HttpSession对象。
HttpSession对象中,提供了一个setAttribute()方法,可以向Session会话中的保存数据,以便于后续其他用到Session的地方可以使用对应的数据。案例代码:
package com.gitcode.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;/** * @version 1.0.0 * @Date: 2024/2/12 9:53 * @Author ZhuYouBin * @Description: */public class SetSessionServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、获取 HttpSession 对象 HttpSession session = request.getSession(); // 2、保存数据到 Session session.setAttribute("username", "保存Session会话数据"); }}1.4、删除Session数据
Session数据是保存在服务器的内存里面的,所以如果Session中的数据不再需要使用的时候,我们应该删除对应数据,减少内存空间的占用。
HttpSession对象中,提供了一个removeAttribute()方法,该方法作用是删除指定名称的session数据。另外,HttpSession对象还提供了一个invalidate()方法,该方法可以删除Session中的所有数据。案例代码:
package com.gitcode.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;/** * @version 1.0.0 * @Date: 2024/2/12 9:53 * @Author ZhuYouBin * @Description: */public class RemoveSessionServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、获取 HttpSession 对象 HttpSession session = request.getSession(); // 2、删除Session中的数据 session.removeAttribute("username"); // 删除所有session数据// session.invalidate(); }}1.5、设置Session有效时间
设置Session的有效时间有两种方式,如下所示:
第一种方式:修改web.xml配置文件中的<session-config>标签下的<session-timeout>标签的属性,这种设置有效时间的单位是分钟。
<!-- 设置Session有效时间 --><session-config> <!-- 设置session有效时间10分钟 --> <session-timeout>10</session-timeout></session-config>第二种方式:调用HttpSession对象中的setMaxInactiveInterval()方法,设置有效时间,单位是秒。
package com.gitcode.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;/** * @version 1.0.0 * @Date: 2024/2/12 9:53 * @Author ZhuYouBin * @Description: */public class TimeoutSessionServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、获取 HttpSession 对象 HttpSession session = request.getSession(); // 2、设置有效时间 session.setMaxInactiveInterval(1800); }}1.6、Session运行原理
Session是保存在服务器中的一些数据,一般用于跟踪用户数据以及一些状态信息。Session的工作原理大致如下所示:
客户端向服务器发起请求,此时服务器会在内存中创建(已经存在,则直接获取)一个Session对象。服务器向Session中保存数据信息,之后会给这个Session生成唯一的一个ID,叫做:SessionId。服务器将这个SessionId放到HttpServletResponse响应头中的Set-Cookie上,并且Cookie名称叫做:JSESSIONID。客户端接收到Cookie数据之后,会将这个SessionId保存到浏览器。下一次发起请求的时候,浏览器会携带上SessionId一起发送给服务器。服务器接收到SessionId之后,找到对应的Session对象,进行数据操作。
Session的工作原理大致如下图所示:
查看浏览器可以看到设置的Session响应头信息:
以上,就是HttpSession会话对象的常用方法及其使用。
今天就到这里,未完待续~~