(转自个推,理解起来不难)

在技术面试中,经常被问到“说说Cookie和Session的区别”,大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,你能说出几点?今天个推君就和大家谈谈“Cookie和Session”的那些事儿。

Cookie是什么?

从它的词语本身含义来看:

Cookie:

n. 饼干;小甜点

N-COUNT A cookie is a piece of computer software which enables a website you have visited to recognize you if you visit it again. 再次访问某一网站时,能令网站识别访问人的计算机软件。

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。如何识别特定的客户呢?cookie就可以做到。每次HTTP请求时,客户端都会发送相应的Cookie信息到服务端。它的过期时间可以任意设置,如果你不主动清除它,在很长一段时间里面都可以保留着,即便这之间你把电脑关机了。

既然它是存储在客户端的,换句话说通过某些手法我就可以篡改本地存储的信息来欺骗服务端的某些策略,那该怎么办呢?我们先按下不表,来看看另外一位朋友 —— Session。

Session是什么?

同样,我们先来看看释义:

Session:

普通释义:n. 会议;(法庭的)开庭;(议会等的)开会;学期;讲习会

计算机释义:会话

Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制。它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库或者集群中。在浏览器关闭后这次的Session就消失了,下次打开就不再拥有这个Session。其实并不是Session消失了,而是Session ID变了,服务器端可能还是存着你上次的Session ID及其Session 信息,只是他们是无主状态,也许一段时间后会被删除。

实际上Cookie与Session都是会话的一种方式。它们的典型使用场景比如“购物车”,当你点击下单按钮时,服务端并不清楚具体用户的具体操作,为了标识并跟踪该用户,了解购物车中有几样物品,服务端通过为该用户创建Cookie/Session来获取这些信息。

如果你的站点是多节点部署,使用Nginx做负载均衡,那么有可能会出现Session丢失的情况(比如,忽然就处于未登录状态)。这时可以使用IP负载均衡(IP绑定 ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决Session的问题),或者将Session信息存储在集群中。在大型的网站中,一般会有专门的Session服务器集群,用来保存用户会话,这时可以使用缓存服务比如Memcached或者Redis之类的来存放Session。

目前大多数的应用都是用 Cookie 实现Session跟踪的。第一次创建Session时,服务端会通过在HTTP协议中反馈到客户端,需要在 Cookie 中记录一个Session ID,以便今后每次请求时都可分辨你是谁。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?建议使用URL重写技术进行会话跟踪,即每次HTTP交互,URL后面都被附加上诸如 sid=xxxxx 的参数,以便服务端依此识别用户。

换个姿势~

客户端和服务端之间的通信交流,可以这样简单理解:

比如当你在个推技术分享沙龙上觉得某位讲师讲得很好,在会后问了他几个问题,他对你这些问题进行了回答,这就是一个会话。但这个讲师太受欢迎,于是工作人员收集问题,并给每个提问者一个号码牌,讲师按照号码牌依次给出相应解答并告诉相应的人。这就是Session。一段时间后,当你再次遇见这位讲师,他发现你身上有上次回复你的答案,知晓你是那个好学的程序猿。于是你欣喜若狂,哇塞,讲师居然认出我了,这就是Cookie,你的小甜点。客户端好比听课的技术爱好者,服务端就是这位讲师。

Cookie还可以在一些方便用户的场景下使用。比如你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以被写到Cookie里面,当访问网站时,网站页面的脚本可以读取这个信息,自动填写用户名,方便用户使用,给用户一点甜头。

总结语:

1、Cookie 在客户端(浏览器),Session 在服务器端。

2、Cookie的安全性一般,他人可通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优。重要交互信息比如权限等就要放在Session中,一般的信息记录放Cookie就好了。

3、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。

4、Session 可以放在 文件、数据库或内存中,比如在使用Node时将Session保存在redis中。由于一定时间内它是保存在服务器上的,当访问增多时,会较大地占用服务器的性能。考虑到减轻服务器性能方面,应当适时使用Cookie。

5、Session 的运行依赖Session ID,而 Session ID 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。

6、用户验证这种场合一般会用 Session。因此,维持一个会话的核心就是客户端的唯一标识,即Session ID。

题外话,那么话说Session Cookie能被篡改么?

理论上可以,只要改变了连接时的Session ID 就可以了~

转载于:https://blog.51cto.com/water12345/1965897

详解COOKIE和SESSION关系和区别相关推荐

  1. 详解cookie和session之间的区别与联系

    Cookie 什么是 Cookie HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息) 每个HTTP请求都是完全独立的,服务端无法确认当前访 ...

  2. 【面试题】详解Cookie、localStorage、sessionStorage区别

    [面试题]详解Cookie.localStorage.sessionStorage区别 三者基本概念 Cookie localStorage sessionStorage 安全性的考虑 Cookie. ...

  3. 详解Cookie、Session和缓存的关系(转)

    1 Cookie和Session Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实 ...

  4. COOKIE和SESSION关系和区别

    一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 c ...

  5. 详解 Cookie 纪要(vue.cookie,jquery.cookie简化)

    今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://www.jeffjade.com/2016/10/31/115-summary-of-cookie/ 原文 ...

  6. Hibernate对象关系映射详解之一对多关系映射

    Hibernate对象关系映射详解之"一对多"关系映射 之前学习Hibernate框架的时候,对这七大关系映射一直是云里雾里的,虽然可以仿照写出代码,但是不能独立编写出来.鉴于工作 ...

  7. java接口vm和dto的区别_第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  8. java mcu 视频会议_详解视频会议终端和MCU的区别

    详解视频会议终端和MCU的区别 视频会议终端和MCU都是视频会议系统的核心组成部分之一,但其价格也相对高昂,是整个视频会议系统的主要成本之一.但是不熟悉视频会议系统的人,常常将视频会议终端和MCU无意 ...

  9. 云计算、大数据、人工智能傻傻分不清楚?本文详解这三者的关系

    云计算.大数据.人工智能傻傻分不清楚?本文详解这三者的关系 提示: 今天跟大家讲讲云计算.大数据和人工智能.这三个词现在非常火,并且它们之间好像互相有关系. 一般谈云计算的时候会提到大数据.谈人工智能 ...

最新文章

  1. Techparty-广州Javascript技术专场(学习分享)
  2. java swing 例子(一些)
  3. DCMTK:OFOptional的单元测试
  4. Raspberry Pi 3 计算模块,CPU性能提高了十倍
  5. edas部署需要哪些参数_强夯设计与施工中需要确定的主要技术参数有哪些
  6. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析
  7. [鸟哥linux视频教程整理]04_02_Linux 权限及权限管理
  8. 如何使用_如何使用Excel播放音乐
  9. php留言板记录ip,如何用php程序记录来访IP
  10. [蓝桥杯2018初赛]字母阵列-单向dfs
  11. cocos2d-x for xna创建动画-人物行走
  12. python构造一个二叉树_二叉树-链表存储,用二叉树构造表达式(Python实现)
  13. 用友ERP-NC系统 漏洞 NCFindWeb接口任意文件下载
  14. c语言 美元符号,汇编语言 美元符号
  15. readonly属性
  16. MT5 EA交易期货-获得持仓
  17. 一年级语文四季心田花开专项练习题
  18. flask 图文混排
  19. python读取csv文件路径设置_python读取csv文件
  20. 微信ipad协议(PC版)源码demo

热门文章

  1. 「AI初识境」深度学习中常用的损失函数有哪些?
  2. 网络规模更小、速度更快,这是谷歌提出的MorphNet
  3. 关于条件随机场的一些补充
  4. 干货丨机器学习傻瓜指南
  5. CCF的A类期刊和会议有哪些?人工智能顶会ACL,ICML,NeurIPS,ICLR论文投稿时间以及影响因子等
  6. 为啥辣椒会辣得人嘴巴疼?这个问题竟然和今年诺奖有关
  7. Nature:2020年最佳科学影像,每一张都是壁纸,每一张都是历史
  8. 从地心到宇宙,再到治疗癌症与“赋灵”智能,这届腾讯WE都聊了些啥?
  9. Cell:重大突破!三位学术大咖,打造全新“DNA显微镜”
  10. 一文读懂你该了解的5G知识:现在别买5G手机