首页 > 其他分享 >cookie 和 session 的区别

cookie 和 session 的区别

时间:2023-01-15 11:02:56浏览次数:33  
标签:浏览器 服务器端 区别 session cookie 存放 id


cookie 和 session 的区别_运维

1. 前言


cookie 和 session 的区别是什么?这个问题在面试中问到的频率非常高

cookie 和 session 的共同点: 都是用来记录用户访问浏览器时保存的数据,比如:用户的身份信息等

2. cookie 和 session 的工作原理


cookie 工作原理:

浏览器端第一次发送请求到服务端,服务器端创建 cookie,该 cookie 中包含用户的信息,然后将该 cookie 发送到浏览器端。浏览器端再次访问服务器端时会携带上服务器端创建的这个 cookie,服务器端通过 cookie 中携带的数据区分不同的用户

session 工作原理:

浏览器端第一次请求到服务端时,服务器端会创建一个 session,同时创建一个特殊的 cookie,这个 cookie 的值就是 session_id,服务器端将这个 cookie 发送到浏览器端。当浏览器端再次请求服务器端时,浏览器端会携带上这个 cookie,服务器端会很根据这个 cookie 值,也就是 session_id,去查询 session 数据,从而区分不同用户

3. cookie 和 session 的区别总结


cookie 数据存放在浏览器端,session 数据存放在服务器端,但是 session_id 存放在浏览器端

1. 安全性

因为 cookie 数据存放在浏览器端,所以 cookie 没有 session 安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全性建议使用 session

2. session 会占用服务器性能

session 会在一定时间内保存在服务器上,当访问增多时会比较占用服务器的性能,考虑到减轻服务器性能耗损,应当使用一些 cookie

3. cookie 保存的数据受限

单个 cookie 保存的数据不超过 4k,而 session 则存储在服务器端,可以保存更多复杂的数据类型

4. 当禁用 cookie 后,session 还能使用吗?


当我们了解过 session 的工作原理后,可以得知,使用 session 的过程中,session_id 是存放在浏览器端的 cookie 中的,所以,当我们禁用 cookie 后,session 是不能正常使用的

那么问题来了,禁用了 cookie,还想要正常使用 session,应该怎么做呢?

禁用 cookie 后,session 不能正常使用的原因是 cookie 中的 session_id 无法发送到服务器端;所以,只要将 session_id 想办法传递给服务器端即可。方法有很多,比如最常见的: URL 传参

 

标签:浏览器,服务器端,区别,session,cookie,存放,id
From: https://blog.51cto.com/10zhancom/6008370

相关文章

  • Flex项目release后图片资源不见了–图片资源采用嵌入与不嵌入的区别
    ​近期项目发现,在使用release发布项目包,图片找不到了,而debug下面又有图片。后来发现,原来图片被另外一个组件嵌入了。下面例子展示了组件嵌入和不嵌入图片的区别<?xmlversi......
  • final、finally与finalize的区别
    final、finally与finalize的区别1.简单区别:final用于声明属性,方法和类,分别表示属性不可改变(常量),方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行......
  • 深拷贝与浅拷贝的区别?如何实现一个深拷贝?
    一、数据类型存储JavaScript中存在两大数据类型:基本类型引用类型基本类型数据保存在在栈内存中引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存......
  • 重载和重写的区别
    重载:发生在同一个类中,方法名相同,参数列表不同(参数类型、参数个数、参数顺序),访问修饰符和返回值可以不同。重写:发生在父子类中,方法名和参数列表必须相同,访问修饰符的范围要......
  • go-rod 读取cookie
      //readnetworkvaluesfori,cookie:=rangepage.MustCookies(){log.Printf("chromecookie%d:%+v",i,cookie)} ......
  • 栈和堆的区别以及栈数组和堆数组的区别
    ​ 这里写得很简洁,实际上堆的机制比较复杂,我详细地学习了Windows下的堆管理机制,如果对这部分感兴趣的话,可以参考我的另一篇文章:https://www.cnblogs.com/XiuzhuKirakira/......
  • Session
           Session还可以通过setAttribute()保存用户信息 req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");......
  • C语言中~与!的区别
    !是逻辑非or否定​凡是a的值不为0的,!a就等于0;​如果a的值为0,则!a的值为1而~这个是按位取反比如inta=2;用二进制表示为00000010;则!a=0......
  • id_rsa/id_rsa.pub/authorized_keys之间的区别说明
    id_rsa/id_rsa.pub/authorized_keys之间的区别说明公私钥方式登录就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作。假......
  • Linux进程线程区别
    Linux进程线程区别前情提要:https://www.cnblogs.com/yumingkuan/p/16036746.htmlLinux内核源代码里面,进程和线程,是一个结构体。在linux内核设计者看来,这俩是一个东西,但......