一、问题

cookie和session的区别?

二、回答

1、总结如下
- cookie:
  - cookie存储于客户端本地,即浏览器缓存
  - cookie存储着sessionId,作为后台session缓存的主键,可以快速识别用户身份,减少后台请求
  - 问题:数据量较小,不适合存储大数据,如有些图片很大就支撑不了
  - 问题:有些服务器禁用cookie,就无法使用cookie
  - 替代方案:采用HTML5的Session Storage,支持较大的数据存储

- session:
  - session存储于服务器端,即web服务器缓存
  - session存储着登录后用户的基本信息,以减轻数据库服务器的压力
  - session后台有设置缓存失效时间,长时间不登录,后台会清除session缓存
  - 服务器重启会导致session缓存数据丢失
  - 问题:集群数据共享问题,如web1存用户基本信息,web2下单,从web2中无法获取到web1的用户信息
  - 替代方案1:使用Redis替代session,实现分布式缓存
  - 替代方案2:不使用缓存,将信息写在HTTP协议里,使用token

2、cookie与session交互示意图

如上图,当客户端用户在www.xxx.com网址下输入用户名密码,登录成功,服务器端会为admin这个用户创建一份session缓存空间,存储admin用户的基本用户信息,其主键为sessionId;

服务器端在响应的header中,将sessionId返回给客户端,客户端得到sessionId,会将其存储到本地磁盘中:名称sessionId,值1234,Domain为.xxx.com,还有过期时间等;

当用户继续操作如添加购物车,此时客户端检测到本地有.xxx.com域名的cookie,会自动在请求header中加上该cookie,值为sessionId=1234,发给服务端;

服务器端接收到请求,检测sessionId为1234在缓存区有该主键的session,从而知道用户身份是admin用户,返回成功。

3、cookie的问题及解决方案
(1)清理掉cookie导致重新登录的原因?
当我们将浏览器中的cookie清除掉以后,它会清掉本地存储的sessionId信息,这样再次访问该网站,请求头里没有携带sessionId,后台无法通过sessionId检测到你是谁,就会认为你是没登录过的用户,让你重新登录。

(2)cookie容量较小,现在有的图片很大,无法存储,且有的服务器禁用cookie,如何解决?
可以采用HTML5的Session Storage,以支持较大的数据存储。

4、session的问题及解决方案
(1)长时间不登录导致账号被踢掉的原因?
服务器端的sessionId缓存空间很小,大概只有4k,当大量用户登录,服务器需要为每个用户创建session缓存空间,就不够用对服务器来说有压力,为了解决这个问题就有了session缓存的失效时间,一般为30分钟。

长时间不登录,如超过30分钟,服务器端的session超过失效时间就会自动清掉,此时客户端拿着老的cookie里存的sessionId去访问服务器,服务器检测不到对应的session信息,即不认识你,就会让你重新登录。

(2)服务器重启导致session缓存数据丢失的原因?
因为session数据存在缓存里,又没有落在磁盘上,服务器重启缓存数据会丢失,session缓存数据自然也就没了,这是正常的特性,如同未保存的word文档打开后数据丢失一样。

(3)session真正的问题是:集群环境下的数据共享问题
现在很多后台服务器都是分布式集群环境,比如我有2台web服务器,web1缓存中存储了登录后的用户基本信息,web2下单,那么在web2服务器上想要获取web1缓存中的用户信息是获取不到的。

为了解决这个问题,目前有2种替代方案:
第一种是:利用redis缓存存储,也就是不把缓存缓在单个服务器上,而是缓在一个redis缓存数据库里,这样web1可以写redis,web2读redis,大家都操作一份缓存数据;

第二种是:利用token,也就是用户基本信息不放在缓存中,而是写到http协议里,这样web1登录完了以后,把用户信息放在token里返回,web2操作时带着token去访问,服务器也能识别到用户身份。

cookie和session的区别?一文讲透的更多相关文章

  1. JavaWeb之Cookie和Session的区别

    Cookie和Session的区别 一.cookie机制和session机制的区别 ********************************************************** ...

  2. Cookie和Session的区别

    前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题.不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题 ...

  3. cookie 和session 的区别(转)

    二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有 ...

  4. Token ,Cookie和Session的区别

    在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...

  5. Cookie 与 Session 的区别

    Cookie与Session的区别 cookie的简介 cookie是Web服务器保存在客户端的一系列文本信息 cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能:容易信息泄露 ...

  6. 理解Cookie和Session的区别及使用

    资料一: Cookie和Session的区别 共同之处: cookie和session都是用来跟踪浏览器用户身份的绘画方式. 区别: cookie数据保存在客户端,session数据保存在服务端. s ...

  7. Token 、Cookie和Session的区别

    本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...

  8. cookie 和session 的区别详解

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  9. Cookie和Session的区别详解

    本文引用自:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一 ...

  10. cookie 和session 的区别

    假如我填好了淘宝的用户名密码,点击登录,浏览器客户端像服务器端发送请求,这时服务器端看这个用户是第一次登陆,session会让客户端这个浏览器生成个cookie,并给cookie一个session i ...

随机推荐

  1. 《UNIX 传奇:历史与回忆》读后感

    <UNIX 传奇:历史与回忆> 是 bwk(Brian W. Kernighan)2019 年的新作,回忆了 UNIX 在大半个世纪的风雨历程,是一本引人入胜的书籍.通过对 UNIX 操作 ...

  2. 预处理器 Less 的十个语法

    Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 不过浏览器只能识别 CSS 语言,所以 Les ...

  3. 【解惑】介绍三大数据库的with语句的写法及使用场景

    WITH 子句通常被称为 "Common Table Expressions"(CTE),俗称内存临时表,当使用 WITH 语句时,应注意具体的数据库版本和支持情况.以下是对 My ...

  4. [python]使用faker库生成测试数据

    简介 Faker库可用于随机生成测试用的虚假数据. 可生成的数据参考底部的参考链接. 安装: python -m pip install faker 快速入门 from faker import Fa ...

  5. 基于Word2Vec的诗词生成器

    基于Word2Vec制作的诗词生成器 1.什么是Word2Vec? Word2vec 是 Word Embedding 方式之一,属于 NLP 领域.它是从大量文本预料中以无监督方式学习语义知识的模型 ...

  6. 领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进

    大家好,我是付威,一名已在编码第一线奋斗了十余年的程序员.在2019年我初次接触到领域驱动设计(Domain-Driven Design,简称DDD)的概念.在我的探索中,我发现许多有关DDD的教程过 ...

  7. Stack Overflow开发者调查发布:AI将如何协助DevOps

    Stack Overflow 发布了开创性的2023年度开发人员调查报告 [1].报告对 90,000 多名开发人员进行了调查,全面展示了当前软件开发人员的体验.接下来,本文将重点介绍几项重要发现,即 ...

  8. jdk17下netty导致堆内存疯涨原因排查

    背景: 介绍 天网风控灵玑系统是基于内存计算实现的高吞吐低延迟在线计算服务,提供滑动或滚动窗口内的count.distinctCout.max.min.avg.sum.std及区间分布类的在线统计计算 ...

  9. 正则表达式快速入门三: python re module + regex 匹配示例

    使用 Python 实现不同的正则匹配(从literal character到 其他常见用例) reference python regular expression tutorial 目录 impo ...

  10. Jenkins持续集成入门到精通(入门篇)

    1. 什么是持续集成 持续集成(Continuous integration,简称CI)指的是频繁将代码集成到主干.它的目的,就是让产品可以快速迭代,同时保持高质量.核心措施,代码集成到主干之前,必须 ...