JavaWeb| 详解Cookie与Session会话技术

简介: JavaWeb| 详解Cookie与Session会话技术

1.写在前面的话


今天Web系列终于换了一个主题了,咱们这次来讲讲Cookie和Session会话技术,其实有一定web基础的人对这两个东西还是比较熟悉的,不过不熟悉也没关系,这篇文章我会写的比较详细,也会比较长,如果你看的比较累了可以收藏一下,下次继续来看。


      这篇文章主要会讲到---简单介绍会话技术,Cookie的会话流程,Cookie的创建和发送,Cookie的常见API,获取Cookie,Session的会话流程,Session对象的创建和获取,使用Session域对象存取数据,Session的生命周期,Session持久化,购物车的简单使用。


2. 会话技术是个啥?

       

       通俗的来讲就是你打开浏览器访问一个网站,然后到你关闭浏览器这个过程就是一次会话。会话技术就是你这次访问中客户端的一些数据和状态。


      会话技术分为Cookie和Session。Cookie数据是存在客户端本地的,这样可以减少服务器的存储压力,但是安全性较差,可以从客户端清除cookie。 Session数据是存储在服务器上的,安全性可能相对来说更好,但是这样会增加服务器端的压力。


3. Cookie的会话流程


这里给大家准备了一张图,内容就是当我们在访问一些购物网站时,把想要购买的商品添加到购物车,此时我们添加的这个信息就会放入到cookie中,然后服务器将其返回给客户端浏览器,当用户去访问购物车时,就会携带这个cookie去访问列表,此时购物车中就含有刚刚所选择的商品。当然这只是个简单的小栗子,只提供给大家思考cookie是怎么去工作的。


image.png


4. Cookie的创建和发送

 

     这里我直接上代码给大家看看,cookie是如何被创建并且发送出去的:


@WebServlet(name = "CookieServlet",urlPatterns = "/cookie")
public class CookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("goods","milk");
        response.addCookie(cookie);
    }
}


其实正如上面那两行代码那么简单,第一句就是创建cookie对象,第二句利用response里面提供的方法addCookie()来对cookie对象进行添加,我们运行之后可以在开发者工具里面通过抓包看见cookie的值:


image.png


我们此时去访问我们本项目中的一个网页index.jsp,看看这个cookie是否被携带在请求头

中:



image.png


果然,大家可以看到我们访问index.jsp时,我们之前的cookie信息仍然被保存在请求头中。


5. Cookie常见的API

常用的方法:


获得Cookie的名称的方法      String getName()


获得Cookie的值的方法         String getValue()


设置Cookie的有效路径         void setPath(String uri)


设置Cookie的有效时长        void setMaxAge(int time)


将信息回写到浏览器             response.addCookie(cookies);

 

这里的方法我就不给大家一一演示了,相信大家学到这里还是会去调用这些API的。


6. 获取Cookie值


我们还是直接上代码,这次我们需要创建两个Servlet来进行这波操作:


CookieServlet.java


@WebServlet(name = "CookieServlet",urlPatterns = "/cookie")
public class CookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("goods","milk");
        response.addCookie(cookie);
    }
}


getCookieServlet.java


@WebServlet(name = "getCookieServlet",urlPatterns = "/getcookie")
public class getCookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //拿到cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
        //拿到cookie的名字
            String name = cookie.getName();
            if (name.equals("goods")){
            //拿到cookie的值
                String value = cookie.getValue();
                response.getWriter().write(value);
            }
        }
    }
}


可以从上面两块代码看出,我们直接通过request.getCookie()方法就可以去拿到所有的cookie值。大家可以去试一下这两块代码。


7. Session的会话流程

   首先,我们来简单介绍一下Session是个啥吧,我就直接百度百科了(这个比我说的更好)


    Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。




    看完了Session的基本概念,我们回到主题来看看Session的会话流程,这里我给大家准备了一张图,方便大家的理解:


image.png


    这里也比较好理解,客户端添加一个商品到购物车中,此时在服务端会创建一个Session并且给了它一个id,方便下次访问时能够通过这个id来找到它,这个ID就是我们所称的SessionID。


8. Session对象的创建和获取

我们直接上代码来看一下:


@WebServlet(name = "SessionServlet",urlPatterns = "/session")
public class SessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Session,判断服务器上是否存在属于当前会话的Session,
        // 如果有那么返回之前所有的,如果没有那么就新建一个Session
        HttpSession httpSession = request.getSession();
        String id = httpSession.getId();
        response.getWriter().write("sessionID"+id);
    }
}


image.png


9.使用Session域对象存取数据

    其实Session中也是可以存储数据的,它也是域对象(关于域对象是啥可以看我之前的文章),所以他也有相应的方法来存储和获取数据.


image.png


我相信大家看这几个方法都是比较眼熟的,其实每个域对象的存储的方法都差不多。由于篇幅的原因我就不去一一写这些方法给大家看了,大家可以自己动手去试一下。


10.Session的生命周期和持久化

     又谈到生命周期这个东东了,相信大家都不陌生了,无非就是它啥时候出生啥时候挂掉,Session这个还是挺简单的:


创建:第一次执行request.getSession()方法时,就创建了,记得是第一次创建的时候。


销毁:服务器关闭(非正常)、Session过期了(默认是30分钟)



      这里就引申出一个问题,Session的过期时间这么去设置?其实想要修改这个时间,我们只能从配置文件web.xml中去修改,如果我们想让我们所有的项目都修改那么我们可以去修改Tomcat里面的web.xml


image.png


    如果只是单纯的一个项目那么我们直接在我们项目的web.xml里面加上上图的标签代码即可。


    关于持久化这个问题,首先我们得知道Session是基于Cookie来的,所以想要让Session持久化,那么必定得让Cooike先持久化,不然会在浏览器关闭后就被销毁掉,我们来看一下代码:


HttpSession httpSession = request.getSession();Cookie cookie = new Cookie("JSESSIONID",httpSession.getId());//设置持久化时间cookie.setMaxAge(60*60);response.addCookie(cookie);

   

通过上面的代码我们就可以实现Session的持久化!


END

相关文章
|
2天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
17 7
|
4天前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
29 7
|
2天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
14 4
|
2天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
15 2
|
4天前
|
前端开发 Java API
过时Java技术的退役:这些技能你不再需要掌握!
【10月更文挑战第22天】 在快速变化的技术领域,一些曾经流行的Java技术已经逐渐被淘汰,不再适用于现代软件开发。了解这些过时的技术对于新手开发者来说尤为重要,以避免浪费时间和精力学习不再被行业所需的技能。本文将探讨一些已经或即将被淘汰的Java技术,帮助你调整学习路径,专注于那些更有价值的技术。
15 1
|
4天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
9天前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
12 1
|
27天前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
103 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
2月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session