ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Cookie and Session【会话控制】

2021-10-17 12:01:39  阅读:111  来源: 互联网

标签:浏览器 对象 request 会话 Session Cookie cookie response


JavaWeb四大域对象的范围

application(应用域)
整个项目部署之后,只会有一个应用域对象,所有客户端都是共同访问同一个应用域对象,在该项目的所有动态资源中也是共用一个应用域对象

request(请求域)
每一次请求都有一个请求域对象,当请求结束的时候对应的请求域对象也就销毁了

session(会话域)
会话域是从客户端连接上服务器开始,一直到客户端关闭,这一整个过程中发生的所有请求都在同一个会话域中;而不同的客户端是不能共用会话域的

page(页面域)
page(页面域)的生命周期是指页面执行期间。存储在页面域的对象只对于他所在页面是可访问的

为什么需要会话控制?

保持用户登录状态,就是当用户在登录之后,会在服务器中保存该用户的登录状态,当该用户后续访问该项目中的其它动态资源(Servlet或者Thymeleaf)的时候,能够判断当前是否是已经登录过的。而从用户登录到用户退出登录这个过程中所发生的所有请求,其实都是在一次会话范围之内

【控制】
流程控制:控制程序执行流程。

会话控制:控制浏览器与服务器之间会话【如:重启浏览器依然期望会话有效,此时使用(会话控制)】

Cookie

Cookie实际上就是服务器保存在浏览器上的一小段信息【key-value】,用于服务器区分不同浏览器

Cookie的作用

  1. 在浏览器中存放数据
  2. 将浏览器中存放的数据携带到服务器

Cookie工作原理

  • 浏览器向服务器发送请求
  • 服务器创建Cookie对象【卡片】,并保存用户信息。最终服务器将Cookie发送给浏览器
  • 浏览器以后再次发送请求时,携带Cookie对象
  • 服务器通过Cookie对象,区分不同浏览器

Cookie的使用

Cookie相关的API
  • 创建一个Cookie对象(cookie只能保存字符串数据。且不能保存中文)
new Cookie(String name,String value);
  • 把cookie写回浏览器
response.addCookie(cookie); 
  • 获得浏览器带过来的所有Cookie:
request.getCookies() ; //得到所有的cookie对象。是一个数组,开发中根据key得到目标cookie
  • cookie的 API
cookie.getName() ; //返回cookie中设置的key
cookie.getValue(); //返回cookie中设置的value
ServletDemo01代码

在ServletDemo01中创建Cookie数据并响应给客户端

public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 创建一个cookie对象,用于存放键值对
        Cookie cookie = new Cookie("cookie-message","hello-cookie");

        //2. 将cookie添加到response中
        //底层是通过一个名为"Set-Cookie"的响应头携带到浏览器的
        response.addCookie(cookie);
    }
}
ServletDemo02获取Cookie数据的代码
public class ServletDemo02 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 从请求中取出cookie
        //底层是由名为"Cookie"的请求头携带的
        Cookie[] cookies = request.getCookies();

        //2. 遍历出每一个cookie
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                //匹配cookie的name
                if (cookie.getName().equals("cookie-message")) {
                    //它就是我们想要的那个cookie
                    //我们就获取它的value
                    String value = cookie.getValue();
                    System.out.println("在ServletDemo02中获取str的值为:" + value);
                      	/*修改指定Cookie值
				        cookie.setValue("level2");
				        //将修改后的Cookie对象响应给浏览器
				        response.addCookie(cookie);
				        break;
				        方式二【直接创建同名Cookie,进行覆盖】
						Cookie cookie = new Cookie("level","level3");
						response.addCookie(cookie);*/
                }
            }
        }
    }
}
Cookie的时效性

标签:浏览器,对象,request,会话,Session,Cookie,cookie,response
来源: https://blog.csdn.net/chenjiahao123456/article/details/120807924

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有