Session

Session

区别与联系

  1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。 典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户并且跟踪用户,这样才知道购物车里面有几件物品。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件、集群等。
  2. 服务端如何识别特定的客户?第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,就可以依据此来识别不同客户端了。 如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

总结:

  1. Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
  2. Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式

什么是session?

  1. 服务器通过Cookie发送给客户端一个sessionID
  2. sessionID对应服务器里的一小块内存,这里保存着用户的信息,例如登录信息,购物车信息等。
  3. 每次用户访问服务器的时候,服务器通过浏览器发送来的cookie里的sessionID去读取对应的内存里的信息,以此来知道用户的隐私信息。

注意

  1. session的好处是防止用户随意篡改cookie,获取别人的信息。
  2. 如果用户随意篡改了sessionID,那么只能重新登录。
  3. 因为sessionID是随机数,或者随机数夹杂着一些字母,所以没有可能暴力破解sessionID,获取别的用户的信息。

类比:session相当于发会员卡,会员卡上只有卡号(sessionID)。下次去健身房的时候,只要看卡号上,就能确定你本人的去他信息。 而cookie相当于把信息都写在会员卡上了。

关于session的实现代码演示(nodejs)

总结

一般来说,Session 基于 Cookie 来实现。

  1. 服务器通过 Set-Cookie 头给客户端一串字符串
  2. 客户端每次访问相同域名的网页时,必须带上这段字符串
  3. 客户端要在一段时间内保存这个Cookie
  4. Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间
  5. 大小大概在 4kb 以内

Session

Session(不翻译,或翻译为会话)

  1. 将 SessionID(随机数)通过 Cookie 发给客户端
  2. 客户端访问服务器时,服务器读取 SessionID
  3. 服务器有一块内存(哈希表)保存了所有 session
  4. 通过 SessionID 我们可以得到对应用户的隐私信息,如 id、email
  5. 这块内存(哈希表)就是服务器上的所有 session

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Cookie与Session、LocalStorage与Sessionstorage 对比

    SessionStorage 在用户关闭页面(准确的来说是会话(Session)结束)后就失效。其余的和localstorage一样

    代码之风
  • 以登录注册理解Cookie的作用过程

    在登录成功的一瞬间,需要后台设置一个Cookie,记录一下登陆的用户id(这里用邮箱表示,代码在上面),然后发响应给浏览器 例如在服务器端设置响应头:set-c...

    代码之风
  • Cookie

    Cookie 是服务器保存在浏览器的一小段文本信息。浏览器每次向服务器发出请求,就会自动附上这段信息。

    代码之风
  • JSP中的四种作用域

    JSP中的四种作用域包括page、request、session和application,具体来说:

    崔笑颜
  • asp.net Forms身份验证详解

      在做网站的时候,都会用到用户登录的功能。对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证。对于初学者,通常将用户登录信息存放在...

    thz
  • Python 登陆界面雏形

    Label(master,text="账号:").grid(row=0,column=0)

    得野
  • 7大笔记应用,让你的代码效率翻7倍

    但是大多数笔记应用的设计并不是以程序员作为目标受众,这些程序可能会让使用者用起来很难受,甚至完全放弃这些工具。这就是为什么我们为你找来了这些最好的笔记工具。快来...

    华章科技
  • 你用什么软件做笔记?

    出处:makeuseof.com/tag/best-note-taking-tools-programmers/

    好好学java
  • 政府购买云服务降低行政成本

    过购买云服务,各级政府部门单位将不再单独购买设备建设独立的信息中心(资料片)。 近年来,随着云技术与相关产品的发展,购买云服务的集约化信息化系统方式,已逐渐成为...

    静一
  • 【技术专栏】SDN与NFV渐行渐近

    根据市场调研公司Dell'Oro的数据,由于软件定义网络(SDN)及白盒交换机正在影响知名品牌供应商的销售,2014年第一季度全球以太网交换机市场减少了10亿美...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券