你好,是我琉忆。

今天我们讲一讲Session与Cookie的区别

1、Session对象

上一节简单介绍了Cookie,接下来简单介绍Session。Session和Cookie都是会话管理技术的一种。可能你会奇怪记住用户的信息有Cookie就够了,为什么还需要Session?那么我们带着这个疑问一起来看看Session,以及对比两者的区别。

2、什么是Session?

Session的翻译有:一场; 一节; 一段时间; (法庭的)开庭,开庭期; (议会等的)会议,会期;学年; (酒吧中)演奏会(尤指演奏爱尔兰音乐)等等多种意思。一般我们拿来指代“会议”或者“会期”的意思。但是实际我们说的时候都统一用英文名称来称呼这种技术,它和Cookie一样都算是计算机术语。

Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。

当用户登录或访问一些初始页面时,服务器会为客户端分配一个 SessionID。SessionID 是一个加密的随机数字,在 Session 的生命周期中保存在客户端。它可以保存在用户机器的 Cookie 中,也可以通过 URL 在网络中进行传输。用户通过 SessionID 可以注册一些特殊的变量,称为会话变量,这些变量的数据保存在服务器端。在一次特定的网站连接中,如果客户端可以通过 Cookie 或 URL 找到SessionID,那么服务器就可以根据客户端传来的 SessionID 访问会话保存在服务器端的会话变量。Session 的生命周期只在一次特定的网站连接中有效,当关闭浏览器后,Session 会自动失效,之前注册的会话变量也不能再使用。

【如果你还没有关注我的话,可以点点关注,下次更新精彩博文我通知你。】

3、为什么需要Session

需要Session的主要原因是它存储更安全,一般用户的登录状态都是使用Session来存,这样在每个页面之间切换时,我们都可以追踪到当前用户的信息,显示用户的登录状态。那么为什么Session存储更安全呢?原因是因为它的文件存储在服务器端,用户是没有权限操作服务器的,除了服务器管理员有权限操作外。这样就可以避免非法用户窃取Session中的数据,从而保证了数据的安全性。反而客户端的电脑有被黑客入侵窃取文件的风险,或者是别的用户使用该客户端电脑时,直接窃取Cookie文件的风险,导致数据泄露的问题。

4、Session使用在哪些场合?

由于Session数据是存储在服务器端的,安全性比Cookie要高。那么数据安全性要求比较高,比较私密的情况下都可以使用Session。

那么一般我们会用Session存储用户的状态,方便在页面之间切换时依旧显示登录状态。还可以作为缓存,缓存用户购物车数据。为什么购物车的数据不适用Cookie呢?原因很简单,如果用Cookie实现购物车的存储功能,当用户在A电脑放了3件商品到购物车中,用户在A电脑看购物车时3件商品都是可以看到的。但是当用户在B电脑登录账号查看购物车时,会发现购物车中一件商品都没有。如果使用Session就不存在这种问题。那么为什么会出现这种情况呢?原因就在于存储数据的方式不同!首先Cookie是存储数据在客户端,Session是存储数据在服务端。那么当用户在A电脑存储数据到购物车时,如果存到Cookie中,就相当于把数据存储到了A电脑中,在B电脑自然读取不到该Cookie的数据。反而Session存储商品在服务器时,无论你换哪台电脑,都是可以直接从服务器获取该用户的信息展示的。

所以综合下来,总结就是Cookie存储数据在本地,安全性要求不高、不要求数据共享都可以使用它;Session存储数据在服务器,数据安全性要求高、需要共享数据,则可以选择Session。

5、Cookie和Seesion有什么区别?

简单介绍完Cookie和Session之后,我相信你一定有很多疑问,Cookie和Session到底有什么区别?我们简单从多个角度来进行对比。对比结果如下:

那么对比下来,最关键的是,如果存储的数据安全性要求比较高,比较私密,那么数据就存储在Session中,如果安全性要求不那么高就存储在Cookie中。原因是Cookie存储在本地,黑客可以在通讯过程中窃取Cookie解密查看存储信息。如果信息存储在Session中,Session的数据是缓存在服务器端的,黑客是没有权限操作服务器,对Session文件进行破解的,只能获取到SessionID。而SessionID是服务端程序获取Session数据的唯一标识。

6、我写的书开始预售了!

最近正在写一本《ASP.NET Web动态网站》开发的书,预计2月底写完,敬请期待~

预售网址:http://www.71muke.com/course/info/99

更多编程知识获取,可以关注公众号:琉忆编程库。

Session是什么?它与Cookie有什么区别?的更多相关文章

  1. [06] Session实现机制以及和Cookie的区别

    1.为什么有Session和Cookie 根据早期的HTTP协议,每次request-reponse时,都要重新建立TCP连接.TCP连接每次都重新建立,所以服务器无法知道上次请求和本次请求是否来自于 ...

  2. session不一定非得要cookie开启才能使用。也可以使用get传递参数

    session不一定非得要cookie开启才能使用.也可以使用get传递参数 可以将session_id();设置为一个常量. define(’s_id‘ ,$_COOKIE['session_nam ...

  3. 什么是cookie?什么是session?session和cookie有什么区别?

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

  4. 在pycharm中批量插入表数据、分页原理、cookie和session介绍、django操作cookie

    昨日内容回顾 ajax发送json格式数据 ''' 1. urlencoded 2. form-data 3. json ''' 1. ajax $.ajax({ data: JSON.stringi ...

  5. sessionStorage 、localStorage 和 cookie 之间的区别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  6. sessionStorage 、localStorage 和 cookie 之间的区别(转)

    essionStorage .localStorage 和 cookie 之间的区别(转) 2012-05-08 14:29:19|  分类: HTML5CSS3WEBAPP|举报|字号 订阅     ...

  7. sessionStorage localStorage 和 cookie 之间的区别转

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  8. Go原生和GoFrame的Cookie关于MaxAge区别

    Go原生和GoFrame的Cookie关于MaxAge区别 环境: gf v1.14.4 go 1.11 Go原生 type Cookie struct { Name string Value str ...

  9. tf.session.run()单函数运行和多函数运行区别

    tf.session.run()单函数运行和多函数运行区别 觉得有用的话,欢迎一起讨论相互学习~Follow Me problem instruction sess.run([a,b]) # (1)同 ...

  10. Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考

    Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考 在计算机世界中经常需要与数据打交道,这也是我们戏称CURD工程师的原因之 ...

随机推荐

  1. Linux上天之路(五)之Linux基本命令

    1. Linux命令格式 命令 命令选项 学会看语法: {必选项}[可选项] 举例 ls -a /tmp 等价 ls –all /tmp ls 命令 -a 命令选项 简写使用- 全写-- /tmp 参 ...

  2. Go语言系列之标准库flag

    Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单. os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数. ...

  3. 论文翻译:2020_RESIDUAL ACOUSTIC ECHO SUPPRESSION BASED ON EFFICIENT MULTI-TASK CONVOLUTIONAL NEURAL NETWORK

    论文翻译:https://arxiv.53yu.com/abs/2009.13931 基于高效多任务卷积神经网络的残余回声抑制 摘要 在语音通信系统中,回声会降低用户体验,需要对其进行彻底抑制.提出了 ...

  4. 使用.NET 6开发TodoList应用(26)——实现Configuration和Option的强类型绑定

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在上一篇文章使用.NET 6开发TodoList应用(25)--实现RefreshToken中,我们通过使用Configura ...

  5. 【原创】阿里三面:搞透Kafka的存储架构,看这篇就够了

    阅读本文大约需要30分钟.这篇文章干货很多,希望你可以耐心读完. 你好, 我是华仔,在这个 1024 程序员特殊的节日里,又和大家见面了. 从这篇文章开始,我将对 Kafka 专项知识进行深度剖析, ...

  6. hbase region, store, storefile和列簇,的关系

    先来一张大图. Hbase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写:另外一部分作为BlockCache,主要用于读数据:这里主要介绍写数据的部分,即Mems ...

  7. gin中如何自定义验证器

    package main import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding&qu ...

  8. Rock Pi开发笔记(一):Rock Pi系列arm产品方案快速落地方案介绍

    前言   开发RK3399等相关的项目和产品做评估,最近发现Rock Pi4是一个很好的评估版,价格合适,能满足评估的开发,像树莓派一样留出来引脚接口,是很好的快速落地arm系列产品和项目的较好方案选 ...

  9. Atcoder ARC-063

    ARC063(2020.7.16) A \(A\) 题如果洛谷评分很低就不看了. B 可以发现一定是选择在一个地方全部买完然后在之后的一个地方全部卖完,那么我们就只需要即一个后缀最大值就可以计算答案了 ...

  10. windows平台编码转换

    int AsciiToUtf8(char* pSrc, unsigned int nSrcLen, char* pBuffer, unsigned int nBufferLen) { assert(p ...