这个题目可能有点大了,这里主要讨论一种解决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. 前端开发利器—FIDDLER 转

    http://www.cnblogs.com/yuzhongwusan/archive/2012/07/20/2601306.html 前端开发利器—FIDDLER 1.Fiddler相对其他调试工具 ...

  2. Highcharts 点击反选

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. Hive集成HBase详解

    摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询   应用场景 1. 将ETL操作的数据存入HBase 2. HB ...

  4. Building bridges_hdu_4584(排序).java

    Building bridges Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  5. Android AdapterView View的复用机制 分析

    对于ListView.GridView相信大家都不陌生,重写个BaseView,实现对于的几个方法,然后就完毕了我们的界面展示.而且在大部分情况下,我们载入特别多的Item也不会发生OOM,大家也都明 ...

  6. 推荐一款JSON字符串查看器

    JSON Viewer是一款方便易用的Json格式查看器.Json格式的数据阅读性很差,如果数据量大的话再阅读方面会十分困难,有了这软件,问题就解决了,能够快速把Json字符串排列规则的树结构,支持对 ...

  7. C#图像处理(3):在图像上加条形码

    引入Aspose.BarCode用来生成条形码,方法如下: /// <summary> /// 生成条码 /// </summary> /// <param name=& ...

  8. 如何制作windows服务安装包

    以下转自:http://blog.csdn.net/chainan1988/article/details/7087006 Window服务的安装有两个方式: 一.命令安装          通过命令 ...

  9. .net 判断日期格式yyyy-MM-dd hh:MM:ss的正则表达式

    加上引用: using System.Text.RegularExpressions; /// <summary> /// 检查字符串是否是日期格式        /// </sum ...

  10. 浅谈js闭包

    相信很多人只知道闭包这个词但是具体是怎么回事就不太清楚了,最近在群里有很多小伙伴讨论这个问题但还是蒙眬眬的赶脚.索性就写了这篇文章来帮助大家一起理解闭包. 变量作用域 闭包其实想明白了很简单,但是在理 ...