返回顶部
首页 > 资讯 > 前端开发 > JavaScript >cookie和session的工作原理和区别
  • 336
分享到

cookie和session的工作原理和区别

2024-04-02 19:04:59 336人浏览 独家记忆
摘要

本篇内容主要讲解“cookie和session的工作原理和区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“cookie和session的工作原理和区别”吧!为

本篇内容主要讲解“cookie和session的工作原理和区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“cookie和session的工作原理和区别”吧!

为什么需要cookie和session

WEB发展史中,我们知道浏览器与服务器间采用的是  Http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。

所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session,而用的最多也是比较重要的就是cookie和session了。

Cookie是什么

cookie是浏览器保存在用户电脑上的一小段文本,通俗的来讲就是当一个用户通过 http访问到服务器时,服务器会将一些  Key/Value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据通过请求头又被完整地给带回服务器,服务器根据这些信息来判断不同的用户。

也就是说, cookie是服务器传给客户端并保存在客户端的一段信息,这个 Cookie是有大小,数量限制的!!

Cookie的创建

当前 Cookie有两个版本,分别对应两种设置响应头:“Set-Cookie”和  “Set-Cookie2”。在Servlet中并不支持Set-Cookie2,所以我们来看看Set-Cookie的属性项:

cookie和session的工作原理和区别

这些属性项,其他的都说的很清楚了,我们来看看Domain有什么用:

现在,我们假设这里有两个域名:

域名A:a.b.f.com.cn 域名B:c.d.f.com.cn

显然,域名A和域名B都是 f.com.cn的子域名

  • 如果我们在域名A中的Cookie的domain设置为f.com.cn,那么f.com.cn及其子域名都可以获取这个Cookie,即域名A和域名B都可以获取这个Cookie

  • 如果域名A和域名B同时设置Cookie的doamin为f.com.cn,那么将出现覆盖的现象

  • 如果域名A没有显式设置Cookie的domain方法,那么domain就为a.b.f.com.cn,不一样的是,这时,域名A的子域名将无法获取这个Cookie

好的,现在了解完了Set-Cookie的属性项,开始创建Cookie

Web服务器通过发送一个称为Set-Cookie的http消息来创建一个Cookie:

Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

这里我们思考一个问题,当我们在服务器创建多个Cookie时,这些Cookie最终是在一个Header项中还是以独立的Header存在的呢?

cookie和session的工作原理和区别

我们可以看到,构建http返回字节流时是将Header中所有的项顺序写出,而没有进行任何修改。所以可以想象在浏览器在接收http返回的数据时是分别解析每一个Header项。

接着,在客户端进行保存,如何保存呢?这里又要对Cookie进行进一步的了解

Cookie的分类

  • 会话级别Cookie:所谓会话级别Cookie,就是在浏览器关闭之后Cookie就会失效。

  • 持久级别Cookie:保存在硬盘的Cookie,只要设置了过期时间就是硬盘级别Cookie。

好的,现在cookie保存在了客户端,当我们去请求一个URL时,浏览器会根据这个URL路径将符合条件的Cookie放在请求头中传给服务器。

Session

Cookie是有大小限制和数量限制的,并且越来越多的Cookie代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有cookie值,而只传一个唯一ID,通过这个ID直接在服务器查找用户信息呢?答案是有的,这就是我们的session。

Session是基于Cookie来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个id并保存一些信息(例如登陆就保存用户信息,视具体情况),并把这个id通过Cookie存到客户端,客户端每次和服务器交互时只传这个id,就可以实现维持浏览器和服务器的状态,而这个ID通常是NAME为jsESSIONID的一个Cookie。

实际上,有四种方式让Session正常工作:

  • 通过URL传递SessionID

  • 通过Cookie传递SessionID

  • 通过SSL传递SessionID

  • 通过隐藏表单传递SessionID

第一种情况:

当浏览器不支持Cookie功能时,浏览器会将用户的SessionCookieName(默认为JSESSIONID)重写到用户请求的URL参数中。格式:/path/Servlet;name=value;name2=value2?Name3=value3

第三种情况:

会根据javax.servlet.request.ssl_session属性值设置SessionID。

注:如果客户端支持Cookie,又通过URL重写,Tomcat仍然会解析Cookie中的SessionID并覆盖URL中的SessionID

Session工作原理

先看session工作的时序图

cookie和session的工作原理和区别

一、创建session

当客户端访问到服务器,服务器会为这个客户端通过request.getSession()方法创建一个Session,如果当前SessionID还没有对应的httpsession对象,就创建一个新的,并添加到org.apache.catalina.Manager的sessions容器中保存,这就做到了对状态的保持。当然,这个SessionID是唯一的

二、session保存

由图可知,session对象已经保存在了Manager类中,StandardManager作为实现类,通过requestedSessionId从StandardManager的sessions集合中取出StandardSession对象。

我们来看看StandardManager时如何对所有StandardSession对象进行生命周期管理

当Servlet容器关闭:

StandardManager将持久化没过期的StandardSession对象(必须调用Servlet容器中的stop和start命令,不能直接kill)

当Servlet容器重启时:

StandardManager初始化会重读这个文件,解析出所有session对象。

三、session的销毁

这里有一个误区,也是我之前的错误理解,就是我将session的生命周期理解成一次会话,浏览器打开就创建,浏览器关闭就销毁,这样理解是错的!!

session的声明周期是从创建到超时过期

也就是说,当session创建后,浏览器关闭,会话级别的Cookie被销毁,如果没有超过设定时间,该SessionID对应的session是没有被销毁的,

检查session失效

检查每个Session是否失效是在Tomcat的一个后台线程完成的(backgroundProcess()方法中);除了后台进程检验session是否失效外,调用request.getSession()也会检查该session是否过期,当然,调用这种方法如果过期的话又会重新创建一个新的session。

小 结

二者的异同

相同点(有关系的地方):

Session和Cookie都是为了让http协议又状态而存在

Session通过Cookie工作,Cookie传输的SessionID让Session知道这个客户端到底是谁

不同点:

Session将信息保存到服务器,Cookie将信息保存在客户端

工作流程

当浏览器第一次访问服务器时,服务器创建Session并将SessionID通过Cookie带给浏览器保存在客户端,同时服务器根据业务逻辑保存相应的客户端信息保存在session中;客户端再访问时上传Cookie,服务器得到Cookie后获取里面的SessionID,来维持状态。

到此,相信大家对“cookie和session的工作原理和区别”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: cookie和session的工作原理和区别

本文链接: https://lsjlt.com/news/81732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • cookie和session的工作原理和区别
    本篇内容主要讲解“cookie和session的工作原理和区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“cookie和session的工作原理和区别”吧!为...
    99+
    2024-04-02
  • cookie和session有什么区别
    这篇文章给大家分享的是有关cookie和session有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是cookie、session cookie :存储在用户端的一-小段文本,用于服务器识别用户的一...
    99+
    2023-06-15
  • session和cookie有什么区别
    本篇内容主要讲解“session和cookie有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“session和cookie有什么区别”吧!session和cookie有什么区别呢?由于H...
    99+
    2023-06-02
  • 怎么分析cookie和session的区别
    这篇文章给大家介绍怎么分析cookie和session的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1,cookie保存在浏览器(客户端)中,服务器知道数据,cookie可以通过工具随意修改,不安全2,Sessi...
    99+
    2023-06-04
  • php中cookie和session的区别有哪些
    小编给大家分享一下php中cookie和session的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接并且登录成功后,第二次请求服务器...
    99+
    2023-06-14
  • Java中Cookie和Session的区别是什么
    这篇文章主要介绍“Java中Cookie和Session的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中Cookie和Session的区别是什么”文章能帮助大家解决问题。会话技术...
    99+
    2023-07-02
  • Python Flask中Cookie和Session区别详解
    目录前言安装创建虚拟环境进入虚拟环境安装 flaskCookie的使用Session的使用前言 本篇文章,阐述一下Flask中Cookie和Session 为什么要说Cookie和S...
    99+
    2024-04-02
  • Session和Cookie之间区别与联系
    Session和Cookie是两种不同的机制,但它们都用于在Web应用中存储和传递数据。区别:1. 存储位置:Cookie是存储在客...
    99+
    2023-08-14
    Session
  • Cookie的工作原理和应用详解
    目录1. Cookie 原理1.1 Cookie 背景信息1.2 Cookie 工作原理1.3 Cookie 创建、获取、修改1.4 Cookie 共享范围1.5 Cookie 生命...
    99+
    2024-04-02
  • Session和Cookie的区别与联系是什么
    Session和Cookie是两种不同的机制,用于在Web应用中保存用户状态信息。区别:1. 存储位置:Cookie存储在客户端(浏...
    99+
    2023-08-15
    Session Cookie
  • 在java中session和cookie有什么区别
    java中session和cookie的区别:session是存储在服务器端,cookie是存储在客户端的。session的安全性要比cookie高。获取session里的信息是通过存放在会话cookie里的sessionid获取的。coo...
    99+
    2024-04-02
  • laravel操作session和cookie
    一:操作session 1:session配置 Session 的配置文件存储在config/session.php中,配置参数有: (1):配置session驱动 'driver' => env('SESSION_DRIVER',...
    99+
    2023-09-27
    laravel php Powered by 金山文档
  • 怎样分析cookie与SESSION的区别和联系
    怎样分析cookie与SESSION的区别和联系,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中...
    99+
    2023-06-03
  • Java中Cookie和Session详解及区别总结
    目录会话技术Cookie概念快速入门实现原理cookie的细节Cookie的特点和作用案例:记住上一次访问时间分析代码实现Session概念快速入门原理细节Session的特点Ses...
    99+
    2024-04-02
  • flask的cookie和session
      在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例   在我们登陆的时候会有之前在购物车存放的物品。也就是说在一个地方为我们保存了这些数据。前提有一个是要你登...
    99+
    2023-01-30
    flask cookie session
  • 理解cookie和session机制
    cookie和session机制之间的区别与联系...
    99+
    2023-06-03
  • Node之Cookie-Session登录验证的工作原理是什么
    这篇文章主要介绍“Node学习之聊聊Cookie-Session登录验证的工作原理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node学习之聊聊Cookie-Session登录验证的工作原理”文章...
    99+
    2023-07-04
  • 老生常谈Session和Cookie之间区别与联系
    Session和Cookie是用于在Web开发中跟踪和存储用户状态的机制。Session是在服务器端存储用户状态的一种机制。当用户第...
    99+
    2023-08-15
    Session
  • 一文彻底理清session、cookie、token的区别
    目录前言1.为什么会有它们?2.什么是 cookie?3.什么是 session?4.cookie 和 session 的区别?5.token 是什么?总结附:cookie/sess...
    99+
    2023-02-27
    session cookie 区别 cookie与session cookie与token区别
  • Cookie/Session/Token的区别有哪些
    本篇内容主要讲解“Cookie/Session/Token的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Cookie/Session/Token的区...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作