Cookie

什么是 Cookie

HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)

每个HTTP请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。

所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于 告知服务端前后两个请求是否来自同一浏览器 。而这个状态需要通过 cookie 或者 session 去实现。

Cookie翻译过来是‘ 小甜饼’,Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。

cookie 是不可跨域的: 每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)

Cookie会根据 HTTP响应报文 里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下客户端再向服务端发起请求时,客户端会自动在请求报文中加入Cookie值之后发送出去

之后服务端发现客户端发送过来的Cookie后,会检查是那个客户端发送过来的请求,然后对服务器上的记录,最后得到了之前的状态信息。

set-Cookie字段里的重要属性

Set-Cookie: status=enable; expires=Wed, 13-Mar-2019 12:08:53 GMT; Max-Age=31536000; path=/;domain=fafa.com;secure; HttpOnly;
属性 说明 示例
NAME=VALUE 键值对,设置 Cookie 的名称及相对应的值,都必须是字符串类型 status=enable
expires=DATE Cookie的有效期(当省略expires属性时,Cookie仅在关闭浏览器之前有效 expires=Wed, 13-Mar-2019 12:08:53 GMT
Max-Age expires现在已经被max-age属性所取代,max-age用秒来设置cookie的生存期。 Max-Age=31536000
path=/ 限制指定Cookie 的发送范围的文件目录(若不指定则默认为文档所在的文件目录) path=/
domain=域名 作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名)。通过domain属性指定的域名可以做到与结尾匹配一致。比如,指定domain是fafa.com,除了fafa.com那么www.fafa.com等都可以发送Cookie。 domain=fafa.com
Secure 设置web页面只有在HTTPS安全连接时,才可以发送Cookie secure
HttpOnly 它使JavaScript 脚本无法获得Cookie。 HttpOnly

expires & Max-Age

指定了cookie的生存期,默认情况下cookie是暂时存在的,他们存储的值只在浏览器会话期间存在,当用户推出浏览器后这些值也会丢失,如果想让cookie存在一段时间,就要为expires属性设置为未来的一个过期日期。现在已经被max-age属性所取代,max-age用秒来设置cookie的生存期。

httpOnly

如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还是能通过 Application 中手动修改 cookie,所以只是在一定程度上可以防止 XSS 攻击,不是绝对的安全

Session

什么是Session

session 是另一种记录服务器和客户端会话状态的机制

session 是基于 cookie 实现的,session 存储在服务器端,sessionID 会被存储到客户端的 cookie 中

服务端执行session机制时候会生成 sessionID 值,这个ID值会发送给客户端,客户端每次请求都会把这个ID值放到HTTP请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie,因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用。

Cookie、Session认证流程

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session;
  • 请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器;
  • 浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名
  • 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息;
    • 如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息;
    • 如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
  • 此时,当我们在该网站的不同的网页中左右横跳的时候,通过跟随request中的cookie中的 sessionID ,使用相同的session。
  • 当过了一段时间后,,服务器中对应的session的生命周期过去,session中的内容写入数据库,该session被清除。
  • 此时再访问页面,会使用cookie重新登录,服务器重新创建session,重复上述过程

根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态

Cookie与Session的区别

  • 安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。
  • 存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
  • 有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
  • 存储大小不同: 单个 Cookie 保存的数据不能超过 3K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

详解cookie和session之间的区别与联系相关推荐

  1. 详解COOKIE和SESSION关系和区别

    (转自个推,理解起来不难) 在技术面试中,经常被问到"说说Cookie和Session的区别",大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果 ...

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

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

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

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

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

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

  5. Cookie和Session简介与区别

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

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

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

  7. COOKIE与SESSION的真正区别在哪?

    COOKIE与SESSION比较 1.HTTP协议本身是无状态的. 我们上网都要靠HTTP协议传递信息.比如我们在浏览器里键入:www.sanyalanhua.com这个网址并回车,你会发现网址会变成 ...

  8. [CSS]详解display:inline | block |inline-block的区别

    2019独角兽企业重金招聘Python工程师标准>>> [CSS]详解display:inline | block |inline-block的区别[点评网站][发布新闻][申请专栏 ...

  9. 处理对象(toString()方法详解和==与equals方法的区别)

    处理对象(toString()方法详解和==与equals方法的区别) toString()是一个非常特殊的方法,它是一个自我描述的方法.当程序员直接打印该对象的时候,系统会输出该对象的"自 ...

最新文章

  1. Oracle导出空表解决办法
  2. centos7.2安装mysql 1
  3. 全球及中国焦炉气制天然气用催化剂行业前景动态与未来可行性研究报告2022版
  4. harmonyos developer,HarmonyOS 基本控件的实现
  5. pythonlocust使用方法_使用python的locust库进行性能测试
  6. Java基础知识之方法的返回值与重载
  7. Python matplotlib 线图(plt.plot())
  8. golang微服务框架对比_最强开源微服务框架,全网独家整理
  9. ecshop 首页调用多个促销,显示到计时
  10. 水木周平戏说中国网络黑幽默!
  11. Ubuntu 10.04 HP LaserJet 无法打印 **** Unable to open the initial device, quitting 错误
  12. Unity 异常记录日志功能
  13. Linux:试管中的生命
  14. 基于人工智能的图像处理技术:利用Opencv实现
  15. 网络基础设施的相对落后对于信息化社会的快速发展的影响
  16. C语言学习笔记1——C语言程序
  17. linux系统盘需要空间,Linux操作系统要怎么查看磁盘剩余空间
  18. 如何在IPad上优雅地看移动硬盘中的视频
  19. 织梦 php版本,织梦DEDECMS在PHP版本高于5.5的情况下无法使用关键词內链的解决方法...
  20. Linux压缩打包命令——tar、zip、unzip

热门文章

  1. java线程的睡眠、挂起、阻塞
  2. 【Firefly Ubuntu设置系统为中文失败原因说明及解决方法~】
  3. Vue3 + Typescript 兼容低版本 Chrome
  4. 史上最深入浅出的IT术语解读
  5. 如何进行关键词分析?_电动机保护器-上海硕吉电器_新浪博客
  6. ctfshow-web爆破(web21-28)
  7. DFS之最大人工岛(填海造陆) 827.
  8. android 触摸灵敏,安卓手机打开这个设置,流畅度瞬间提升60%
  9. 如何挖掘用户终身价值?开发会员制?
  10. python 最小值算法_机器学习:Python实现最小均方算法(lms)