在讨论session跨域共享问题之前,我们首先要了解session做了什么,没做到什么
- HTTP是无状态的,也就是说服务器不知道谁访问过他,但是有时候,又需要我们去保留这个状态比如说用户的登录信息,如果每次访问都要登陆,这个用户体验实在是太糟糕了,session就解决了这个问题,他把用户登陆信息维护在服务端,会生成一个JSessionID给客户端,客户端下次访问的时候就带着这个JSessionID,服务端根据这个ID去查找用户信息。
- 当然,session的缺点也很明显,session是存在服务器的内存中的,如果session过多会影响服务器的性能。因为session只在一台服务器里,当有多台服务器的时候,访问别的服务器肯定会失败。
明确了session所做的事以及它的缺陷之后,解决session存在的问题就容易多了,下面我简要说一下5种解决方案
- Session Sticky
- Session复制
- Session集中存储
- Cookie
- Token
Session Sticky :是指让同一客户端的请求,落在同一台服务器上,因为不会落在别的服务器上,所以自然就不会出现跨域问题。但是这个方案的缺点非常的明显,就是不管比采用什么算法,用户的请求落在哪一台服务器上都是由用户来决定的,可能会造成单点压力,并且如果一台服务器出问题,可能会造成一片区域的人无法访问
Session复制 :是指服务器之间互相同步session信息,也就是说每台服务器上都保存着所有的session信