首页 > 其他分享 >Cookie和Session的关系和区别

Cookie和Session的关系和区别

时间:2022-09-26 20:58:27浏览次数:41  
标签:请求 区别 Session cookie Cookie 服务器 客户端

4.请简述Cookie和Session的区别

4.1什么是Cookie

  • HTTP是无状态协议,他不能以状态来区分和管理请求和响应。也就是说服务器但从网络连接上无从知道客户身份。所以服务端给每个客户端都颁发一个通行证,每个人在访问服务器时都必须携带自己的通行证。这样服务器就能从通行证上确认客户身份,这就是Cookie的工作原理
  • Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,每次请求客户端都会把这段文本发送给服务器
  • Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态
  • Cookie会根据响应报文里的一个叫Set-Cookie的部首字段信息,通知客户端保存Cookie。当客户端再向服务器发送请求时,客户端会自动在请求报文中加入Cookie值之后发送出去
  • 之后服务端发现客户端发送的Cookie后,会检查是哪个客户端发送的请求,然后对比服务器上的记录,得到之前的状态
  • 首先客户端向服务器发送请求,服务器会通知客户端保存Cookie,与此同时服务器也知道了这个Cookie是向哪个用户发送的(以此来辨别客户端)。当客户端再次向服务器发送请求的时候会在请求报文中加入服务器让他保存的Cookie值,一起发送给服务器,服务器发现客户端发送的cookie就会检查是哪个用户发送的请求,对比服务器的记录得到之前该客户端的状态

4.2什么是Session

  • 服务端执行Session机制的时候会生成session的id值,这个id值会发送给客户端
  • 客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie
  • 因此在我们完全禁掉浏览器Cookie的时候,服务端的session也会不能正常使用
  • 必须注意的是session不一定必须使用cookie,这也是session相对于cookie的高明之处。当客户端的cooKie被禁掉或出问题的时候,PHP会自动把Session ID附着在URL中,这样再通过Session ID就可以跨网页使用Session变量了
  • 服务器会生成session并发送给服务端一个对应的id值,当客户端再次向服务器发送请求时,会把这个id值放在请求头中发给服务器,这样服务器就可以根据客户端发给他的id来分辨客户端
  • 相对的,cookie就需要客户端来保存,在客户端向服务端发请求的时候把这段cookie在请求报文中发送给服务器,服务器根据这段信息分得到用户之前的状态
  1. Session比Cookie安全,Session存储在服务器端,Cookie存储在客户端
  2. cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系
  3. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  4. session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能。考虑到减轻服务器性能方面应该使用cookie
  5. 单个cookie在客户端限制是3k,就是说一个站点在客户端存放的cookie不能超过3k

标签:请求,区别,Session,cookie,Cookie,服务器,客户端
From: https://www.cnblogs.com/heyiyuanqi/p/16732407.html

相关文章

  • jQuery中使用过哪些插入节点的方法?他们的区别是什么
    append(),appendTo(),prepend(),prependTo(),after(),insertAfter()before(),insertBefore() 大致可以分为内部追加和外部追加append()表式向每个元素内部追加内容。......
  • jQuery与Zepto的区别
    1、Zepto更轻量级2、Zepto是jQuery的精简,针对移动端去除了大量jQuery的兼容代码3、部分API的实现方式不同1、针对移动端程序,Zepto有一些基本的触摸事件可以用来做触摸屏......
  • jquery.extend 与 jquery.fn.extend的区别
    jquery.extend(object);为扩展jQuery类本身.为类添加新的方法。2.jquery.fn.extend(object);给jQuery对象添加方法。$.extend({    add:function(a,b){returna+b;}}......
  • split() join() 的区别
    split是字符串的方法,将字符串按照特定标志分割成数组例:“u&s”.split(“&”)------ [“u”,”s”]join:是数组方法,将数组按标志组合成字符串 [“u”,”s”].join(“-......
  • 函数声明和函数表达式声明的区别
    函数声明:sum();//10functionsum(){console.log(10)}表达式声明   s();//报错sisnotafunction   vars=function(){console.log(20)}在预解析的过......
  • alpha、beta、rc各版本区别
    很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者“rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思。alpha版:内部测试......
  • 服务器使用cookie传递用户信息而不是用session保存用户信息的原因
    服务器部署在多台机器上所以session在多台机器之间不是共享的所以对于单点登录来说登陆完之后会将用户的信息放在cookie中这样在请求接口的时候就会把cookie带到服务......
  • IPv4和IPv6的区别
    表示不同: 1.IPv4地址以点分十进制表示,ip地址为32位,是数字地址,以点分隔。2.IPv6地址使用以冒号分隔的十六进制数字,ip地址为128位,是字母数字地址,以冒号分隔。八......
  • golang 中 取切片元素 与 切片再生成切片的区别
    funcmain(){//定义一个切片a:=[]byte{1,2,3}fmt.Printf("a的类型%T\n",a)//a的类型[]uint8fmt.Printf("a原来的值%v\n",a)//a原来的值[1......
  • [spring cloud] @EnabledEurekaClient 与 @EnabledDiscoveryClient的区别
    https://blog.51cto.com/u_15437298/4694156相同点都是将自身作为服务向注册中心注册不同点@EnabledEurekaClient只能向eureka注册@EnabledDiscoveryClient通用......