这个题目可能有点大了,这里主要讨论一种解决safari浏览器阻止第三方cookie问题。
 
    场景
 
    公司存在多个域名(a.com,b.com,co.com)这些域名应该统一帐号状态,a.com为公司主域名,其中帐号系统为passport.a.com,b.com现在做一个活动,需要用户进行登录,那么就跳转到passport.a.com进行登录,登录完成完根据参数会跳至活动页面。由于passport.a.com使用的jsonp的形式对a.com,b.com和c.com就行设置登录状态操作(在(如何创建帐号统一服务)中有详细说明),其他浏览器(chrome、ff、IE等)在默认浏览器配置下都没有问题,只有在safari下存在这个问题,原因在于:safari隐私设置,默认阻止第三方cookie设置,但是只要你访问过一次(这里的访问必须是用户手动操作,不能通过JS进行跳转操作)它就允许了。如果是这种情况,那么登录成功跳转回去,用户在b.com或c.com仍然没有登录状态?
 
    尝试解决方案
 
    1. 将页面放在自己服务器下面
 
    也就是说,将passprot.a.com的登录页面在b.com下自己在实现一次,这样可以保证b.com有登录状态,但是存在一下几点问题:
  • 实现成本问题,将登录这么复杂的逻辑需要自己实现并维护,不利于构建统一的帐号服务体系,增加维护成本
  • 只完成了登陆b.com,并不能登录a.com和c.com,没有完成帐号状态的同步
  • 如果登录出现验证码而验证码又不是b.com提供的服务,同样会出现cookie无法校验的问题
 
    2. 代替用户访问一次需要的域名
 
  • 通过前端事件访问,可以模拟用户点击或者直接location跳转,经过测试发现这种方案不靠谱
  • 通过服务端跳转,b.com访问一个jump.a.com专门做跳转处理,可以再到b.com这样的话就能操作a.com的cookie,但是在登录场景还是没有办法使用,原因可以参考上面的解释
 
    3. 服务端302跳转的形式
 
    既然第三方不能操作,那就使用自己的子域就行操作就行了。首先保证自己的东西都放在自己的域名下处理,如果必须要引入第三方的接口时,可以考虑将之前的jsonp请求,转化为302跳转的方式实现。这种形式也有问题,safari浏览器最大的跳转次数是15次,超过15次浏览器就会无法解析。各浏览器302次数限制可以查看浏览器重定向(302)次数限制问题
 
    确定方案
 
    以上几种方案,可以根据自己业务的实际情况选择合适的方式。
 
    针对本文最初提到的场景,我们的解决方案是使用,服务端302跳转代替jsonp请求的方式完成的。整个实现的流程大致如下:
 
    
 
    这样就完成了所有域名登录状态的设置,准确来说是所传域名列表会被设置上登录状态。
 
    总结
 
    这里是以登录为例,解决safari浏览器默认阻止第三方cookie问题的,在其他场景下看情况使用不同的方案,当然在这里也是抛砖引玉,希望能得到更好,更方便的实现方式。再说点儿题外话,讨论这个方案用了不少时间,有很多方案很简单但是我们不能使用是考虑到我们的实现成本问题,已经对用户的影响,这种情况下,尽可能少的让用户来操作什么完成你本身就应该完成的事情。总之一个原则,能不让用户做的尽量别让用户做,用户的认知成本和学习成本你都是无法评估的。
 
 
 

safari浏览器cookie问题的更多相关文章

  1. Ipad Safari iframe cookie 当浏览器默认禁用第三方COOKIE

    前一阵子,我们发现高版本的Safari中默认会阻止第三方cookie,如下图所示. 问题 什么是第三方cookie呢?在访问一个网站A时,网站A算作第一方,如果网站A中引用了另一个网站X(网站X的域名 ...

  2. 苹果safari浏览器登陆时Cookie无法保存的问题

    Safari浏览器不支持将非ASCII字符存入Cookie,所以中文在保存的时候就会出问题,分号(";")也不能存在Cookie中,所以需要通过方法去除内容中的分号,在Cookie ...

  3. 关于苹果safari浏览器登陆时Cookie无法保存的问题

    前段时间,修改了登录处理后给到客户端浏览器Cookie的内容,新增了一个姓名的value,发现safari不能保存该Cookie的内容,同时Chrome.firefox.ie等浏览器都能正常的访问,直 ...

  4. Safari浏览器Session问题

    Safari浏览器中经常出现session无法写入或同一个会话中Session ID常变动的事情.尤其以iOS7版本居多. 问题本身并不难猜,应该就是cookie无法写入引起的.奇怪的是,部分同版本的 ...

  5. 各浏览器Cookie大小、个数限制

    一.浏览器允许每个域名所包含的cookie数: Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie. Firef ...

  6. Google Chrome谷歌/火狐/Safari浏览器开发者工具基本使用教程

    前言 在阅读下面内容之前,那么些简单的了解浏览器开发者工具到底是什么东西,到底有什么用途. 浏览器开发者工具到底是什么? 其实简单的说,浏览器开发者工具就是给专业的web应用和网站开发人员使用的工具, ...

  7. 各浏览器Cookie大小、个数限制【转】

    先插入一条广告,博主新开了一家淘宝店,经营自己纯手工做的发饰,新店开业,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!店名: 小鱼尼莫手工饰品店经营: 发饰.头花.发夹.耳环等(手工制作)网店: ...

  8. 苹果微信内置浏览器cookie

    苹果微信内置浏览器cookie会被自动清掉,但safari不会清除,原因还未找到,解决方法是把前端把数据通过header传到后台

  9. 不同浏览器Cookie大小

    一.浏览器允许每个域名所包含的 cookie 数:Microsoft 指出 Internet Explorer 8 增加 cookie 限制为每个域名 50 个,但 IE7 似乎也允许每个域名 50 ...

随机推荐

  1. QA笑话----杂思

    QA工程师走进酒吧,要了一杯啤酒,要了0杯啤酒,要了999999999杯啤酒,要了一只蜥蜴,要了-1杯啤酒,要了一个sfdeljknesv,酒保从容应对,QA工程师 很满意.接下来,一名顾客来到了同一 ...

  2. 解决selenium 启动ie浏览器报错:Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones

    启动ie代码: System.setProperty("webdriver.ie.driver", "bin/IEDriverServer.exe"); Web ...

  3. MyBatis配置解析

    MyBatis配置文件解析(概要) 1.configuration:根元素 1.1 properties:定义配置外在化 1.2 settings:一些全局性的配置 1.3 typeAliases:为 ...

  4. 优化移动体验的HTML5技巧

    简介 连轴转的刷新,不断变向的页面转换,以及tap事件的周期性的延迟仅仅是现在移动web环境令人头疼事情的一小部分.开发者正试图尽可能的靠近原生应用,但却经常被各种兼容问题,系统复位,和僵化的框架打乱 ...

  5. 未知宽高div水平垂直居中3种方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head&g ...

  6. UVa 10701 - Pre, in and post

    题目:已知树的前根序,中根序遍历转化成后根序遍历. 分析:递归,DS.依据定义递归求解就可以. 前根序:根,左子树,右子树: 中根序:左子树,根,右子树: 每次,找到根.左子树.右子树,然后分别递归左 ...

  7. asp.net mvc 页面缓存

    在任务中需要实现点击浏览器back按钮,加载的前一页面需要强制刷新. 想要在前端通过js来绑定数据实现,但是觉得太麻烦,还是用另一种方式来解决: 不缓存该页面. 简单易懂: Response.Cach ...

  8. oracle服务的开始和关闭 CMD

    开始: @echo halt oracle service ...net start OracleServiceORCLnet start OracleOraDb11g_home1TNSListene ...

  9. idea导入项目出错

    在idea导如项目后,总是会报错,每个类都会报错.解决的办法是: 1. 2.添加本地jdk 3.添加项目中的lib包

  10. winscp连接vmware ubuntu

    winscp连接vmware ubuntu,因为第一次安装在虚拟机上的ubuntu是没有ssh服务的,不能在windows上通过工具进行连接,所以需要以下步骤进行ssh配置     1:检查ssh状态 ...