在讨论 session 跨域共享问题之前,我们首先要了解 session 做了什么,没做什么

1.HTTP无状态的,也就是说服务器不知道谁访问过他,但是有时间,又需要我们去保留这个状态比如说用户的登录信息,如果每次访问都要登录,这个用户体验实在是太糟糕了,session 就解决了这个问题,他把用户登录信息维护在服务端,会生成一个JSessionID给客户端,客户端下次访问的时候就带着这个JSessionID,服务端根据这个IP去查找用户信息。

2.当然,session 的缺点也很明显,session 是存在服务器的内存中的,如果 session 过多会影响服务器的性能。因为 session 只在一台服务器里,当有多台服务器的时候,访问别的服务器肯定会失败。

明确了 session所做的事以及它的缺陷之后,解决 session 存在的问题就容易多了,下面我简要说一下5种解决方案

  • Session Sticky
  • Session复制
  • Session集中存储
  • Cookie
  • Token

Session Sticky:是指让同一客户端的请求,落在同一台服务器上,因为不会落在别的服务器上,所以自然就不会出现跨域问题。但是这个方案的缺点也是非常明显的。就是不管比采用什么算法,用户的请求落在那一台服务器上都是由用户来决定的,可能会造成单点压力,并且如果一台服务器出问题,可能会造成一片区域的人无法访问

Session复制:是指服务器之间互相同步session信息,也就是说每台服务器上都保存着所有的session信息。这样做的缺点也是非常明显的。上文提到过,session 是存在内存中的,会严重影响服务器性能,当然,你也可以把他存在数据库中,但是这会大大影响响应速度。还有一个缺点就是,当访问量过大时,由于相互同步的问题,会造成大量的网络开销

Session 集中存储,是指把 session 集中存储在一个第三方的服务器中,可以是 Redis,可以是数据库或是其他什么东西。当需要访问的时候,都去这个服务器去查。这样做也有不小的缺点,首先是单点问题,如果这个服务器宕机,那么所有的服务器都是不可用的,所以这里必须做集群,会浪费服务器资源。还有一点是,每次验证都需要来这个服务器来查,会凭白增加一次网络开销,降低访问速度

Cookie:状态信息不再保存在服务端,而是保存在客户端,客户端每次访问服务器的时候,把这个信息带给服务器。但是 Cookie 也有不少问题,最被人关注的就是安全问题,因为信息是保存在客户端的,就比较容易盗取、篡改,当然这些安全问题都是有解决方案的,这不是限制 Cookie 的主要原因,真正限制 Cookie 的原因是很多设备不支持Cookie

Token 和 Cookie 类似,Token 也是由客户端来维持状态的,信息存储在客户端内,具有平台无关性。Token实质上是服务端给客户端的一个字符串,上面包含着一些验证信息,相当于一个身份令牌,你拿着这个令牌就能得到他的服务。相比较于 Cookie,Token 更加的灵活,可以在任何地方生成,基于 Token 的权限系统是非常容易实现的

最新文章

  1. 《疯狂Java讲义》学习笔记——第2章 理解面向对象
  2. MySQL 笔记2
  3. Node.js-视图引擎【1】-Swig集成express的安装与配置
  4. 转载:C# this.Invoke()的作用与用法 理解三
  5. 通过jekyll建立静态网页
  6. 二代身份证阅读器(XZX)
  7. susy 学习之进阶
  8. golang的连接池例子
  9. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇02:滚屏》
  10. 在virtual pc中搭建基于ubuntu 的git环境
  11. javascript mvc 简单例子
  12. HDU 4839 The Game of Coins _(:зゝ∠)_
  13. vs 中一些快捷键
  14. [转载]【虚拟化系列】VMware vSphere 5.1 虚拟机管理
  15. Python 字符串大小写操作
  16. 解决Bug:Size of a request header field exceeds server limit
  17. [USACO11JAN]大陆议会The Continental Cowngress_2-sat
  18. js添加的元素无法触发click事件
  19. Luogu--3381 【模板】最小费用最大流
  20. WPF Dispatcher介绍

热门文章

  1. Selenium3+python自动化009-iframe定位
  2. ubuntu19.04 redis启动和停止及连接
  3. ApiBehaviorOptions 统一模型验证配置不生效
  4. [MongoDB] 使用PHP在MongoDB中搜索的实现
  5. iloc与loc的区别
  6. Jmeter-几种脚本录制方式
  7. c语言 memcpy()
  8. 一点点学习PS--实战二
  9. LED Craft Light - How To Solve: Home Decoration Lighting
  10. 转载:android audio flinger