zoukankan      html  css  js  c++  java
  • Cookie和Session在Node.JS中的实践(二)

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

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

    session

    COOKIE存在于客户端,而SESSION存在于服务端,并且SESSION需要COOKIE的支持。
    2018-09-23-19-08-16

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

    session运行机制

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

    2018-09-25-11-46-16

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

    2018-09-25-11-45-28

    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
  • 相关阅读:
    读《人人都是产品经理》
    前端值得看的博客
    git 常用命令 创建查看删除分支,创建查看删除tag等
    看《如何令选择变得更加容易》
    读【失控】——众愚成智
    html5 postMessage
    下拉滚动加载更多数据
    html select用法总结
    分布式系统事务一致性解决方案
    nginx简易教程
  • 原文地址:https://www.cnblogs.com/wljqds/p/session.html
Copyright © 2011-2022 走看看