专栏首页雪雁的专栏程序员过关斩将--cookie和session的关系其实很简单

程序员过关斩将--cookie和session的关系其实很简单

定义

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。

很简短的两段定义,但是已经道出了cookie和session本质的区别,一个位于客户端,一个位于服务端。这个特性带着浓重的色彩,实际中的应用都离不开这个定义。

存储

这里针对浏览器中的cookie来讨论,不要做过多遐想

如果抛开其他特性来说,cookie本质上是浏览器(http请求)提供的一种客户端存储的数据,但是这个存储数据有自己的一些特性,比如:cookie长度的限制,跨域的限制(当然可以在服务端配合的情况下的突破这种限制)等。就像所有的存储一样,cookie也可以保存在内存中,也可以保存在磁盘中,只不过保存在磁盘的时候是在浏览器的存储目录下,毕竟cookie是基于http的,http请求又基于浏览器。

session在很多情况下被称为会话,本质上是一种服务端的存储数据。诞生的主要原因是为了解决http无状态这种特性。既然是数据,其实就可以存储于任何介质中,像实际应用中,有存储于内存中的,也有存储于redis的。所以只要看透了它的本质,存储在哪里可能就只是一个驱动的问题了。其实完全可以自己写一个程序把session的数据存储在txt中,只不过性能上可能需要多加考虑。

有联系吗

cookie

当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:

1. 客户端发送一个请求到服务器 --》

2. 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 --》

3. 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 --》

4. 服务器返回响应数据

set-cookie: session=4a0b9b1cce73c469b8a6b6a8aec294d5; domain=.xx.com; path=/; expires=Sun, 25 Aug 2019 08:21:27 -0000; secure; HttpOnly

以上过程很明显是一个最常见的场景,cookie的特性以及值是由服务端来下发,但是不要忘记cookie本质上是一种客户端技术,所以客户端其实同样能操作cookie,比如:登录的时候服务端的返回结果中可以不包含set-cookie的头部,而是把值通过正文来返回,客户端脚本通过读取返回的正文解析出结果,然后写入cookie同样能达到相同的效果。set-cookie只不过是http协议中已经约定好的格式,服务端告诉客户端需要设置cookie的协议而已。当然cookie还有其他很多特性(可能随着发展有所增加或者减少):

属性

介绍

name

name字段为一个cookie的名称

value

value字段为一个cookie的值

domain

可以访问此cookie的域名

path

可以访问此cookie的页面路径

expires/Max-Age

此cookie超时时间。

Size

Size字段 此cookie大小

http

cookie的httponly属性

secure

设置是否只能通过https来传递此条cookie

由于浏览器的安全策略,不同域名(何为不同域名,请百度)的cookie是不允许的,但是可以通过服务端的配置可以解决这个问题。

session

session的创建目的初衷就是为了让服务端记住会话,简而言之就是让服务端能识别出来是哪个客户端,既然要记住,那服务端必须要存储每个会话的数据,比如:实际项目中最常用的用户信息等。服务端存储这些用户数据没问题,最大的一个障碍是怎么样识别诸多请求中哪些是同一个会话。要解决这个问题,只依靠服务端无法解决,必须需要客户端来配合:需要上传会话的标识。

客户端上传会话的标识,必须是客户端和服务端都能支持的协议和数据,其实也可以看做是http请求支持的协议和数据,既然是基于http请求,最方便的就是利用cookie,cookie是一种key-value的数据存储格式,value的值正适合作为session的标识(session也是一种key-value的存储),在这种情况下cookie终于和session有了一定的联系。

session机制利用cookie来作为标识的传输机制,并不意味着只能用cookie,只要是服务端和客户端约定好了位置,session标识我可以放到http请求的任何位置(当然http请求必须得支持传输才可以)。你完全可以把session的标识放到http头Authorization字段,只要服务端能正确的读到此值并且正确解析即可。

有些面试官喜欢问cookie和session的相同和不同,甚至他们的联系,这样的提问在某种程度上是不太好的,容易让人错误的认为cookie和session的联系很密切,但是其实他们的联系很单纯,纯洁的朋友利用关系。

此文篇幅属于5分钟系列,更能有效利用碎片化时间,下一篇,我们也许可以讨论一下基于cookie和session的认证

程序员修神之路--用NOSql给高并发系统加速

程序员修神之路--高并发系统设计负载均衡架构

程序员修神之路--做好分库分表其实很难之一(继续送书)

程序员修神之路--做好分库分表其实很难之二(送书继续)

程序员过关斩将--你为什么还在用存储过程?

程序员过关斩将--小小的分页引发的加班血案

程序员修神之路--问世间异步为何物?

程序员修神之路--提高网站的吞吐量?

程序员修神之路--?分布式高并发下Actor模型如此优秀?

程序员过关斩将--你的面向接口编程一定对吗?

程序员修神之路--高并发下为什么更喜欢进程内缓存

本文分享自微信公众号 - magiccodes(xl----0)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DotNetCore Web应用程序中的Cookie管理

    作者简介:Jon(Jonathan)Seeley,一位资深.NET开发者,主要从事Asp.NET/Asp.NET CORE/WPF等技术栈的开发,他的博客地址为...

    心莱科技雪雁
  • 为什么HTTPS比HTTP更安全?

    近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进...

    心莱科技雪雁
  • 程序员修神之路--高并发下如何缩短响应时间

    网站响应时间是指系统对请求作出响应的时间。通俗来讲就是我们把网址输入进浏览器然后敲回车键开始一直到浏览器把网站的内容呈现给用户的这段时间。网站响应时间是越短越好...

    心莱科技雪雁
  • 程序员过关斩将--cookie和session的关系其实很简单

    Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

    架构师修行之路
  • session与cookie会话机制总结

    session 与 cookie 属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才...

    卡二条的技术圈子
  • session与cookie详解

    session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取...

    卡二条的技术圈子
  • JQuery之cookie增删改查操作

    在Java Web开发中cookie一般有两种新建方法,一种是在Java中创建维护,另一种是在前端中创建和维护。 二者之间最大的区别就是:Java中的cooki...

    林老师带你学编程
  • 很全很全的前端本地存储讲解

    cookie 前言 网络早期最大的问题之一是如何管理状态。简而言之,服务器无法知道两个请求是否来自同一个浏览器。当时最简单的方法是在请求时,在页面中插入一些参数...

    企鹅号小编
  • 一文看懂Cookie奥秘

    Cookie是什么?cookies是你访问网站时创建的数据片段文件,通过保存浏览信息,它们使你的在线体验更加轻松。 使用cookies,可以使你保持在线登录状态...

    小码甲
  • Cookie的路径以及Cookie域

    HTML5学堂:在之前的文章《使用cookie实现换肤功能》当中,曾经介绍过关于cookie的用法,也书写了一个简单的demo,在这篇文章当中,主要针对cook...

    HTML5学堂

扫码关注云+社区

领取腾讯云代金券