会话跟踪技术(Session 以及Cookie)

简介: 会话跟踪技术(Session 以及Cookie)

一: 前提概要

1>会话:

       会话指的是用户打开浏览器, 访问某些web服务器资源的时候, 会话就会进行建立, 直到有一方断开, 那么会话才会结束, 需要注意的一点是, 一次的会话可以有多次的请求以及响应

2>会话跟踪:

       是一种用于维护浏览器状态的方法, 服务器需要识别多次的请求, 分别来自于那些会话, 以便在一次的会话当中的多次请求已经响应当中, 实现 "数据共享"

3>服务器为什么不能够识别这些请求来自哪个浏览器?

       因为服务器跟浏览器之间使用的是HTTP协议, HTTP协议是无状态的, 每次浏览器向服务器进行请求的时候, 服务器都会将其视作新的请求, 所以我们需要会话跟踪技术实现会话之间的数据共享

4>实现方式:

1.客户端会话跟踪技术:  Cookie

客户端会话跟踪技术, 实际上就是将一些共享的数据存储在客户端

2.服务端会话跟踪技术:  Session

  服务端会话跟踪技术, 实际上就是将共享的数据存储在服务端

   两者实现的功能其实都是一样的,都是为了解决一次会话中, 多次请求的问题


二: 实现方式--Cookie

 1>基本使用:

               1.发送Cookie:

 // 发送cookie
//创建cookie  进行发送cookie
        //1.创建cookie对象
        Cookie cookie = new Cookie("username", "zs");
 
        resp.addCookie(cookie);

2.获取Cookie:

 
//        获取响应的cookie
        //在这里, 我们通过req获得的cookie包括了其中所有的cookie, 所以需要通过数组进行相应的接收
        Cookie[] cookies = req.getCookies();
//        之后通过循环 以及一些判断的方式来获响应的数据, 键值对
        for (Cookie cookie : cookies) {
            String name = cookie.getName();
 
//            进行判断, 我们仅仅只需要我们所输入的键值对即可
            if ("username".equals(name)){
                String value = cookie.getValue();
                System.out.println(name+" "+value);
                break;
            }

  2>Cookic原理:

       需要知道的一点是: COOKIE的实现都是基于HTTP协议的!

举例:

 在浏览器发送请求之后, 服务端识别出来是cookie, 这个时候服务端会将相应的共享数据存储在响应头(set-cookie)当中, 之后, 将其相应到浏览器当中, 并且将相应的数据存储在浏览器内存中


       之后, 浏览器在同一个会话当中再次发送请求, 并且将刚才存储的共享数据放在请求头 (cookie)当中, 以请求的方式放入服务端, 从而实现数据的共享

  3>Cookie的使用细节:

       1.存活时间:

               默认的情况下, Cookie会存储在浏览器当中 , 浏览器关闭的时候相应的Cookie会自动的进行销毁

       2.手动设置Cookie的存活时间:

       

       通过这种方式, 可以实现某些记住账号, 密码的任务

Cookie cookie = new Cookie("username", "zs");
 
//        设置存活时间:  一周
        cookie.setMaxAge(60*60*24*7);
 
 
        resp.addCookie(cookie);

3.Cookie存储中文:

       实际上Cookie不能够直接存储相应的中文信息, 比如在这里, 我将相应的值设置为  '张三'


Cookie cookie = new Cookie("username", "zs");

       进行访问就会出现以下的错误:

   *解决方式:URL编码*

       通过使用URL编码 URL解码  的方式进行转码:

String value="张三";
        //URL编码:
        value = URLEncoder.encode(value,"UTF-8");
        System.out.println(value);
        Cookie cookie = new Cookie("username", value);
        System.out.println("username"+" "+value);
if ("username".equals(name)){
                String value = cookie.getValue();
                //url解码
                value = URLDecoder.decode(value, "UTF-8");
//                进行打印
                System.out.println(name+" "+value);
                break;
            }

   

 问题得到解决


三: 实现方法 -- Session:

       1>基本使用:

       1.发送Session:

  // 存储到Session当中
//        1.获取Session对象
        HttpSession session = req.getSession();
        //2.存储数据
        session.setAttribute("username","zs");

 2.获取Session:

  //获取数据
        //1获取Session对象:
        HttpSession session = req.getSession();
 
        Object username = session.getAttribute("username");
        System.out.println(username);

2>Session原理:

       结论 :  Session是基于Cookie来进行实现的

示例:

 服务器在接收到相应的请求之后, 发现使用的是Session的方式, 之后就会解析Session的ID, 将其进行记录, 之后再将其通过Cookie的方式, 使用请求头(set-cookie)并且在其中保存ID的值, 传给客户端, 之后客户端将相应的值保存在浏览器当中, 之后再进行响应, 将刚才的数据以响应头(cookie)并且附带之前的地址值传给服务端

3>Session的使用细节:

       1.Session的钝化, 活化:

       在服务器进行重启之后, Session之前进行提交的数据是否还会存在?(这里指的是正常的关闭, 在IDEA的控制面板当中, 如果直接停止程序是非正常关闭系统)

①钝化:

       指的是在服务器进行正常的关闭之后, Tomcat会自动的将Tomcat当中的数据存在硬盘当中

 ②活化:

再次进行启动服务器之后, 从文件当中加载数据到Session当中, 即在正常关闭之后, 之前的Session是不会被立刻的销毁的, 再次进行启用的时候就会继续加上上一次的数据到Session当中


TIPS:需要注意的一点是, 如果不关闭服务器, 而是在启动服务器之后在浏览器进行访问, 关闭网页, 再次进行访问, 这个时候对应的Session并不是同一个的Session地址值会发生改变, 不再是同一个地址值

2.Session的销毁:

       

     

第二种自我销毁的方式, 常常会被用于在退出登录的时候, 销毁相应的Session对象

相关文章
|
12天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
36 4
|
15天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
149 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
27天前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
19 1
|
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
|
2月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
59 0
|
2月前
|
存储 JSON 数据安全/隐私保护
Cookie + Session 的时代已经过去了?
在探讨“Cookie + Session”这一经典组合是否已经过时的议题时,我们首先需要理解它们在Web应用认证和会话管理中的历史地位与当前面临的挑战。随着Web技术的飞速发展,特别是无状态服务、OAuth、JWT(JSON Web Tokens)等技术的兴起,这一传统机制确实面临了前所未有的变革压力。但说它“完全过去”或许过于绝对,因为它在特定场景下仍发挥着重要作用。
36 0
|
3月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
184 1
|
3月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
58 1