会话跟踪技术:JavaScript 里的cookie 和服务端 里的session

会话跟踪是web程序中常用的技术,用来跟踪用户的整个会话。
常用的会话跟踪技术是Cookie 和Session。
Cookie 通过客户端记录用户信息,Session通过服务端记录用户信息 !
简单来说就是cookie是存储在客户端的(浏览器),而session是存储在服务端的。

简单点理解 会话追踪的原理就是由于HTTP是无状态的,当有登录状态,需要区分用户的时候,服务端不知道对方是谁,所以就给客户端的用户们每人发一个会话标识,这样服务端就可以根据这个不同的id知道谁是谁了

一、 Session的发展史:

  1. 在很久以前,web网页基本上只是浏览,随着web交互的兴起,有了登录加购物车等,这样服务端就需要知道这个人是谁,谁加了什么。
  2. 因为HTTP是无状态的,所以想出来的办法就是给大家每个人发一个会话标识(session id)。( 简单点说就是一个字符串,每个人收到的不一样,每次发起请求时,浏览器把这个字符串告诉服务端,服务端就知道谁是谁了。)
  3. 但是缺点是如果上千万的人都来访问,服务器就要保存上千万的session id ,对服务端来说压力太大,限制了服务器的扩展能力。而且如果是集群,会有在A机器上登录,那么B机器上没有这个人的session id 的问题。
    • 当然可以使用会话粘滞解决这个问题,就是让用户请求一直粘连在机器A上,但是这样如果机器A挂了就完蛋了。
    • 也可以使用session复制,但是这个方法太笨重了。
    • 还可以把session id 集中存储到一个地方,但是会有单点失败的可能,也就是说负责session登录的那个机器如果挂了, 所以人都要重新登录一遍。
    • 比较推荐的是把session 保存在 redis 里。方便存储和查询

session的原理:

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。

二、Cookie:

定义:

Cookie是由客户端保存的小型文本文件(最大支持4096字节),其内容为一系列的键值对。
是由W3C组织提出的,目前已经成为标准,所有主流浏览器都支持Cookie。

注意: 如果浏览器不支持cookie或者禁用了,cookie功能就失效了。比如 ios 安卓等 不支持cookie因为他们用的是原生的系统,而不是浏览器

使用场景:

cookie和session组合在一起可以作为用户认证机制之一: Session-Cookie机制

工作原理:

服务器通过Set-Cookie响应头字段来指示浏览器保存Cookie, 浏览器通过Cookie请求头字段来告诉服务器之前的状态。
Cookie中包含若干个键值对,每个键值对可以设置过期时间。
Cookie需要由HTTP服务器设置,保存在浏览器中,在用户访问其他页面时,会在HTTP请求中附带上该服务器之前设置的cookie。

浏览器服务器发起请求收到HTTP请求,计算应返给浏览器的HTTP响应。在响应头加入Set-Cookie字段,它的值是要设置的Cookie。收到响应浏览器在响应头中发现Set-Cookie字段,会将该字段的值保存在内存或者硬盘中。第二次请求,会将服务器设置的Cookie附加在HTTP请求的头字段Cookie中。浏览器服务器

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享