职业经验 session 与 cookie 区别

我问问 for 求职面试圈 · 2018年08月20日 · 最后由 cotyyang 回复于 2018年12月14日 · 2276 次阅读

该怎么回答 ● session 与 cookie 区别 比较好

最佳回复
共收到 10 条回复 时间 点赞
  • HTTP 是无状态的,因为无状态,当用户登录后,服务端会更新 cookie,这样之后的每次请求会带上 cookie,就能代表这个用户是登录的了。
  1. 可以抓包看一下,登录后,respone header 有一个 set-cookie
  2. 当登录后,手动清除 cookie 后,网站又要你登录了。
  • 这样解决了请求是带状态的,但是因为 cookie 在客户端,不够安全。比如抓包获取到 cookie 后,伪造请求带上 cookie 就可以访问登录后的内容了,于是有了 session。
  1. session 存在服务端,一般与 cookie 一一对应,所以即便客户端伪造了一个 cookie,如果这个 cookie 没有对应的 session,也会判定成没有权限访问。
  2. 早期的时候, session 存在内存里,但是多台服务器间不能共享数据,所以现在常用是用分布式缓存保存 session,如 memcache。
  3. session 由服务端控制,就可以有很多策略,比如同一个用户只能用一个 session,session 有超时时间,过了就要重新生成等。 比如,一般你今天抓包的 cookie,明天伪造一个请求,多半会失败。(看服务器策略)
  • 综上, cookie 的作用主要是让客户端的 HTTP 请求带上状态,session 的作用主要是保证内容安全。

我是参考的面试宝典里的。
cookie 和 session 的区别总结:
(1)cookie 机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上;而 session 机制采用的是在服务器端保持状态的方案,即数据放在服务器上;
(2)cookie 安全性不够,session 放在服务器端,较为安全;
(3)cookie 性能更高一些。session 会在一定时间内保存在服务器上,因此当访问量增多时,会降低服务器的性能;
(4)单个 cookie 保存的数据不能超过 4KB,而 session 不存在此问题。

session 是会话,比如客户端给服务端投递一件传家宝,比如一颗美丽的葡萄,打个电话 call 服务器,服务器接了电话,确定是能吃的,就接收了这件东西,这里二个人在通话,就是 1 个 session 存储在网络缓存区->靠近服务端网关上面,传递的葡萄就是消息包。传递的方式就是协议文件格式 - 电话。
一旦当服务端没忍不住,吃掉葡萄,客户端怒而对着电话开了一枪,通过协议文件格式传输过去打中了,服务端倒地了,会话主动中断了。

cookie 会一直存在客户端本地,客户端对着电话开了一枪,服务端听到一声枪声。客户端继续开窗。开到 cookie 时间结束了,客户端还是没有干死服务端。。。

徐旻 回复

恰好翻书翻到了😂

百度一下,你就知道

我问问 回复

两者区别比较之处很多,最直接的区别,cookie 存本地,session 存服务器。浏览器里清缓存,有一项就是清理 cookie。不知道你那个面试官,究竟想问些啥。。。求其他大神来科普下。。。

黑山老妖 回复

我想在这个求职面试圈里面得到一个比较好的答案,百度,我早都查了

https://www.cnblogs.com/endlessdream/p/4699273.html
以前在 cnblog 上看到的一篇文章,写的挺清楚的

Littlecome 回复

受教了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册