你好,是我琉忆。

今天我们讲一讲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. preg_match绕过总结

    preg_match绕过总结 什么是preg_match 绕过方法 1.数组绕过 preg_match只能处理字符串,当传入的subject是数组时会返回false 2.PCRE回溯次数限制 PHP利 ...

  2. 【CSAPP】第三章 程序的机器级表示

    目录 1. 数据的编码与存储 2. 汇编指令 2.1 数据传送指令 访存方式 数据传送指令 入栈出栈 2.2 算术/逻辑指令 2.3 过程控制指令 控制码 比较指令 跳转指令 条件设置指令 3. 程序 ...

  3. ManualResetEvent实现线程的暂停与恢复

    背景 前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果.当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新. 分析这个需求,发现需要 ...

  4. Nginx限制连接控制访问量

    目录 一:限制连接数模块(同时访问网址能访问多少次) 1.修改网址模块文件 2.测试 3.重启 4.增加解析ip 5.压力测试 二:控制Nginx访问量 1.连接池 2.限制数 3.测试 4.重启 5 ...

  5. LVM搭建

    q前提:挂盘,分区.用 fdisk -l 可以查看. 使用 fdisk  /dev/sdb 分区,分区后进行partprobe使分区生效.之后进行 pv,vg,lv 的创建. pvcreate /de ...

  6. Java 继承01

    继承 ●示例 class Person { public String name; Person(){ System.out.println("Person Constrctor...&qu ...

  7. Element Plus 正式版发布啦!🎉🎉

    今天,我们非常高兴地宣布 Element Plus 稳定版正式发布.自第一个 commit 起,经过 1 年零 7 个月的持续迭代开发,总计 2635 commits,经过 256 位贡献者所提交的 ...

  8. Lesson3——NumPy 数据类型

    NumPy 教程目录 NumPy 数据类型 numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型. 下表 ...

  9. 解决SpringBoot连接Nacos集群报400问题

    问题描述 搭建一个Nacos集群,使用 SpringBoot 程序连接 Nacos 集群,在启动的时候报异常,程序启动失败,而后程序假死.详细控制台日志信息如下: failed to req API: ...

  10. 「Ynoi2018」未来日记

    「Ynoi2018」未来日记 区间x->y,kth值... 不管了,先序列分块... 查询 第k值,假定知道每个数的权值,对值域分块. 对于整块,维护前\(i\)个块当中,值域在\(j\)块里以 ...