session跨域共享问题解决方案
在讨论 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 的权限系统是非常容易实现的
session跨域共享问题解决方案的更多相关文章
- session跨域共享解决方案
要让session跨域共享,需要解决三个问题: 1.通过什么方法来传递session_id? 2.通过什么方法来保存session信息? 3.通过什么方法来进行跨域? 一.传递session_id有4 ...
- 使用Spring Session和Redis解决分布式Session跨域共享问题
http://blog.csdn.net/xlgen157387/article/details/57406162 使用Spring Session和Redis解决分布式Session跨域共享问题
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
- Yii2 框架下 session跨域共享互通
在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目. 几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, ...
- session跨域共享
www.maxomnis.com的index.php文件内容 <?phpsession_start();setcookie("user", "alex proter ...
- 【分布式系列】session跨域及单点登录解决方案
Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息. ...
- sso单点登录的入门(Session跨域、Spring-Session共享)
1.单点登录,就是多系统,单一位置登录,实现多系统同时登录的一种技术.单点登录一般是用于互相授信的系统,实现单一位置登录,全系统有效的. 区分与三方登录(第三方登录) ,三方登录:某系统,使用其他系统 ...
- 跨域共享cookie和跨域共享session
转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...
- thinkphp session 跨域问题解决方案
session 跨域,困扰我好几天,今天终于弄明白了! 不管是thinkphp ,还是本身的php 其实都要设置session.cookie_domain 设置好,就OK了 在thinkphp 里,在 ...
随机推荐
- eclipse unable to start within 45 seconds
在eclipse4.8.2中运行tomcat8.5项目时,提示出错: Server Tomcat v8.0 Server at localhost was unable to start within ...
- openstack入门及应用
一.OpenStack云计算的介绍 (一)云计算的服务类型 IAAS:基础设施即服务,如:云主机 PAAS:平台即服务,如:docker SAAS:软件即服务,如:购买企业邮箱,CDN 传统IT IA ...
- 意外发现--http-server使用
http-server 在很多情况下,需要在本地开启http服务器来测试.所以就需要一个简单的省事好用的http服务器.以前的时候,都是使用php的本地环境,但是,自从学了nodejs,发现了http ...
- 835. 字符串统计(Trie树模板题)
维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x: “Q x”询问一个字符串在集合中出现了多少次. 共有N个操作,输入的字符串总长度不超过 105105,字符串仅包含小写英文字母 ...
- QQ第三方登录(一)
要实现QQ第三方登陆 这就需要QQ方面的支持. 首先 我们需要在QQ开发者网站上注册,https://connect.qq.com/index.html 登陆之后点击应用管理,正常情况下我们是未提交 ...
- Highcharts中文帮助文档
Highcharts中文帮助文档Highcharts 简介: Highcharts 是一个制作图表的 Javascript 类库,可以制作的图表有:直线图,曲线图.区域图.区域曲线图.柱状图.饼装图. ...
- 【Python】字符串处理方法
- switch case理解
第一个:分类的思想 ; 第二个就是灵活切换到那一路分支的作用
- EF CodeFirst 之 Fluent API
如何访问Fluent API: 在自定义上下文类中重写OnModelCreating方法,在方法内调用. 注:用法基本一样,配置类中的this就相当于modelBuilder.Entity<Pe ...
- shell 预定义变量
echo "上一次后台pid is $!"echo "当前进程pid is $$"echo "last command return code is ...