Cookie和Session在Node.JS中的实践(二)

cookie篇在作者的上一篇文章Cookie和Session在Node.JS中的实践(一)已经是写得算是比较详细了,有兴趣可以翻看,这篇是session篇,重点在讨论session的特性、概念,以及session和cookie的区别和联系。

session

COOKIE存在于客户端,而SESSION存在于服务端,并且SESSION需要COOKIE的支持。

session是存在于服务端的信息管理机制,它把客户端信息以某种信息形式记录在服务器中,客户端再次访问只需要从session中查找用户的状态就可以了

session运行机制

session的运行机制是这样的,当程序需要为某个客户端的请求创建一个seesion时,服务器会首先检查这个客户端的请求中的cookie是否含有session标识符(很多人把他叫session_id)。
考虑两种检查结果:
1.包含session标识符并且没有过期,则表示服务器已经对这个客户端创建了session,而服务器只需按照session_id把session检索出来使用。

2.不包含seesion标识符或已过期,则需要新创建一个session并且生成与这个session相关联的session_id返回给客户端保存。

session存在的必要性

session存在的必要性,很少文章谈到这个,作者一开始一直都在想这个问题:

使用纯客户端中的cookie就能完成会话保持,为什么需要服务端的session?

先来看这个例子:在一个浏览器中登录博客园,通过开发工具获得了cookie并复制,在另一个浏览器中打开博客园(退出登录状态下),然后把复制好的cookie都填入该浏览器中,刷新,你会发现这个浏览器居然是已经是登录状态了。(作者亲测例子,读者自行测试具体截图不放了,若操作有问题评论区解决)

只要盗取了cookie,就能劫持session。同样的道理,如果单使用cookie,那么也是一样只要盗取了cookie就能做到冒充登录。既然盗取了cookie,无论是session还是cookie都一样会被冒充,那为什么需要session呢?

作者为了明白这个问题,花了很多时间才弄明白,没文化真阔怕。其实session存在的必要性可以从以下几点说明:
1.用session只需要在客户端保存一个id,实际上大量数据都是保存在服务端。如果全部用cookie,数据量大的时候客户端是没有那么多空间的。
2.cookie只是实现session的其中一种方案。虽然是最常用的,但并不是唯一的方法。还有URL等其他方式
3.全部在客户端保存,服务端无法验证,这样伪造和仿冒会更加容易。(伪造一个随机的id很难,但伪造另一个用户名是很容易的)
4.全部保存在客户端,那么一旦被劫持,全部信息都会泄露
5.客户端数据量变大,网络传输的数据量也会变大

其实,在当下的开发中,都是结合二者使用的。

总结

COOKIE存在于客户端,而SESSION存在于服务端,并且SESSION需要COOKIE的支持。session是存在于服务端的信息管理机制,它把客户端信息以某种信息形式记录在服务器中,客户端再次访问只需要从session中查找用户的状态就可以了

session和cookie间的区别和联系:

  1. 最大的区别,session在服务端,cookie在客户端。
  2. 最大的联系,session需要cookie,完成一个会话需要两者结合。
  3. session比cookie要更安全。
  4. 单cookie数据不能超过4K,另外浏览器可能会限制单个站点的cookie数量。而session在服务端没有此类限制。

考虑到后面会使用NODE.JS作为写session和cookie的实践,所以把文章分成3部分最好——cookie篇、session篇、NODE.JS实践篇。这样,读者可以按需去看,写NODE.JS可以看我下一篇的文章,不会NODE的可以跳过了。
下次,NODE.JS见。


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!

Reference

  1. https://blog.csdn.net/fangaoxin/article/details/6952954
  2. http://blog.51yip.com/php/938.html
  3. https://www.cnblogs.com/shiyangxt/articles/1305506.html

Cookie和Session在Node.JS中的实践(二)的更多相关文章

  1. Cookie和Session在Node.JS中的实践(三)

    Cookie和Session在Node.JS中的实践(三) 前面作者写的COOKIE篇.SESSION篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...

  2. Cookie和Session在Node.JS中的实践(一)

    Cookie和Session在Node.JS中的实践(一) Cookie和Session是一个非常有趣的概念,也是一个老生常谈的话题.然而,作者看了许多文章,也翻看了几本书籍,它们对Cookie和Se ...

  3. Node.js中的Session,不要觉得简单哦。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...

  4. 在node.js中使用COOKIE

    node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...

  5. Node.js中的不安全跳转如何防御详解

    Node.js中的不安全跳转如何防御详解 导语: 早年在浏览器大战期间,有远见的Chrome认为要运行现代Web应用,浏览器必须有一个性能非常强劲的Java引擎,于是Google自己开发了一个高性能的 ...

  6. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  7. 如何在Node.js中合并两个复杂对象

    通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...

  8. Node.js 中MongoDB的基本接口操作

    Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...

  9. 初步揭秘node.js中的事件

    当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...

随机推荐

  1. python解析复杂json字符串

    因为项目需要,公司领导对提出了接口测试的要求,因此作为一个测试人员,我第一时间就想到了jmeter这个利器,前面文章也有说明过怎么用jmeter做http协议的接口测试,这里我不再做讲解,此篇主要讲解 ...

  2. linux备忘录-vi和vim

    知识点 vi的三种模式 一般模式 按 ESC 可回到一般模式 相关按键 j 代表 向下按钮 k 代表 向上按钮 h 代表 向左按钮 l 代表 向右按钮 20j 等代表 向下移动20行 Ctrl + f ...

  3. hdu 1597 find the nth digit (数学)

    find the nth digit Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. P4342 [IOI1998]Polygon

    题意翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记. 第一步,删除其中一条边 ...

  5. Eclipse EE导入maven工程

    Eclipse EE下载地址:https://eclipse.org/downloads/ 启动Eclipse后,点击File->Import,选择Existing Maven Projects ...

  6. (转)Ant使用例子

    文章来自:http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实现 ...

  7. 3.6 Lucene基本检索+关键词高亮+分页

    3.2节我们已经运行了一个Lucene实现检索的小程序,这一节我们将以这个小程序为例,讲一下Lucene检索的基本步骤,同时介绍关键词高亮显示和分页返回结果这两个有用的技巧. 一.Lucene检索的基 ...

  8. hibernate中Configuration类的作用

    问题:我们在获得一个SessionFactory对象的时候经常是写下面这行代码: SessionFactory sessionFactory = new Configuration().configu ...

  9. urllib2.URLError: <ulropn error [Errno 10060] >

    在抓网页的时候,如果抓取频率很高,很容易出现这个错误: 意思是服务器拒绝响应.解决的方法为,隔段时间再试,不过这个方法不靠谱.靠谱的方法是增加一个延迟函数 import time time.sleep ...

  10. wordpress对使用的国外主题进行本地汉化

    wordpress有非常多优秀与专业的主题,当然大多数是非中文的 这些主题本身总会有些无法通过wordpress admin后台来配置的在页面上的英文输出 此时你可以去对应的代码去改掉那些输出,不过这 ...