简述

本文仅记录如标题所述场景的测试所得,由于场景有些特殊,且并不需兼容所有浏览器,所以本文的内容对读者也许并无作用,仅为记录。

场景、与实现

  • 需在移动端单点登录
  • 需在移动端跨域访问我们的服务

基于历史原因:

  • 单点登录验证后,如Web网站一样,用Cookie携带SessionID到服务器,服务器根据SessionID管理该用户会话、权限
  • 跨域用CORS,在服务端和客户端有如下设置。

服务端响应:

httpResponse.setHeader("Access-Control-Allow-Origin", "http://example.com:8080");
httpResponse.addHeader("Access-Control-Allow-Credentials", "true");
httpResponse.addHeader("Access-Control-Allow-Methods", "HEAD,POST,GET,PUT,DELETE,OPTIONS");

客户端Ajax请求时设置withCredentials参数为true,记得返回Cookie的首次请求和其它请求都需设置:

function login() {
$.ajax({
url : urlPrefix + "/LoginServlet",
type : "post",
xhrFields: {
withCredentials : true
},
success : function(data, name) {
alert(data)
}
});
} function test() {
$.ajax({
url : urlPrefix + "/BusinessServlet",
type : "post",
xhrFields: {
withCredentials : true
},
success : function(data, name) {
alert(data)
}
});
}

问题

测试过程:

A项目部署在a机器,B项目部署在a机器,B项目的页面跨域访问A项目

测试结果:

  • 在Web端验证基本没问题
  • 在移动端,IOS的Safari浏览器需要在设置 -> Safari -> 阻止Cookie -> 始终禁止才不能通过Cookie传递SessionID

测试过程:

A项目部署在a机器,B项目部署在b机器,B项目的页面跨域访问A项目。

如果a机器和b机器同属同一局域网:

  • 在Web端验证基本没问题
  • 在移动端,IOS的Safari浏览器需要在设置 -> Safari -> 阻止Cookie -> 始终允许允许访问过的网站仅允许当前网站能通过Cookie传递SessionID
  • 在移动端,我的IOS的QQ浏览器没问题

如果a机器和b机器其中之一属于外网:

  • 在Web端验证基本没问题
  • 在移动端,IOS的Safari浏览器需要在设置 -> Safari -> 阻止Cookie -> 始终允许才能通过Cookie传递SessionID
  • 在移动端,我的IOS的QQ浏览器有问题

目前还没探索出的原因,根据测试结果,可能会改为其它实现方法,比如单点登录后用JWT验证会话,用JSONP跨域。

CORS跨域、Cookie传递SessionID实现单点登录后的权限认证的移动端兼容性测试报告的更多相关文章

  1. CORS跨域cookie传递

    服务端 Access-Control-Allow-Credentials:true Access-Control-Allow-Methods:* Access-Control-Allow-Origin ...

  2. 跨域请求传递Cookie问题

    问题描述 前后端完全分离的项目,前端使用Vue + axios,后端使用SpringMVC,容器为Tomcat. 使用CORS协议解决跨域访问数据限制的问题,但是发现客户端的Ajax请求不会自动带上服 ...

  3. CORS跨域操作cookie

    CORS 跨域 在服务端设置响应头 ACAO( Access-Control-Allow-Origin )即可 前端代码,运行在 8080 端口上 $.ajax({ url:'http://local ...

  4. 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  5. 彻底理解CORS跨域原理

    背景 现在的前端开发中都是前后端分离的开发模式,数据的获取并非同源,所以跨域的问题在我们日常开发中特别常见.其实这种资料网上也是一搜一大堆,但是都不够全面,理解起来也不够透彻.这篇文章就结合具体的示例 ...

  6. ajax——CORS跨域调用REST API 的常见问题以及前后端的设置

    RESTful架构是目前比较流行的一种互联网软件架构,在此架构之下的浏览器前端和手机端能共用后端接口. 但是涉及到js跨域调用接口总是很头疼,下边就跟着chrome的报错信息一起来解决一下. 假设:前 ...

  7. 跨域名 Cookie 传递测试

    问题 我打开了 www.aaa.com 里面的一个页面(www.aaa.com/hello.php),其中这个 hello.php 里面包含一个 <img> 标签,里面的 src 来自于 ...

  8. Asp.net Vnext api CORS( 跨域)

    概述 跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源.而这种访问是被同源策略所禁止的.CORS系统定义了一种浏览器和服务器交互的方式 ...

  9. Asp.Net WebApi 启用CORS跨域访问指定多个域名

    1.后台action指定 EnableCors指定可访问的域名多个,使用逗号隔开 //支持客户端凭据提交,指定多个域名,使用逗号隔开 [EnableCors("http://localhos ...

随机推荐

  1. 持续集成工具jenkins的使用

    jenkins类似于Hadson,是一款持续集成工具.使用jenkins完成自动化部署的表现为:当开发人员向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序.搭建 ...

  2. spring依赖注入之手工装配

    2010-09-05  在spring中手工装配依赖对象,可以有两种方式: 1,在spring配置文件中,通过bean节点下配置,比如: <bean id="service" ...

  3. 第一次使用Mac

    Mac禁用掉默认输入法 搜狗输入法已经包含中文.英文输入法了,其余输入法可以删除掉.按ctrol键的时候本来应该是搜狗输入法中英文切换,结果却是搜狗输入法和ABC输入法之间互相切换. 打开键盘偏好设置 ...

  4. 进阶之路(中级篇) - 015 串口控RGB三色灯

    本文由博主原创,如有不对之处请指明,转载请说明出处. /********************************* 代码功能:串口控RGB三色灯 使用函数: Serial.flush(); / ...

  5. 实体格式化转xml

    In the past, I've done the following to control datetime serialization: Ignore the DateTime property ...

  6. 【SqlServer】SqlServer存储过程使用

    我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理一些业务逻辑,多表关联的时候,还有就是虽 ...

  7. 【jsp】Servlet与jsp之间的传值

    Servlet与JSP 之间的传值有两种情况:JSP -> Servlet, Servlet -> JSP. 通过对象 request和 session (不考虑 application) ...

  8. 在Linux下安装RabbitMQ

    Installing on RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat) 安装新版本的RabbitMQ出错: centos端口转发神器:soca ...

  9. block(八)作用域

    //闭包 NSString* s =@"123"; void (^block)() = ^() { NSLog(@"%@",s); }; block();// ...

  10. 【Algorithm】快速排序

    一. 算法描述 快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第一个),将数组划分为两段,前一段小于value,后一段大于value:然后再分别对前半段 ...