遭遇cookie跨域

在前不久的产品需求中,我们遭遇到一次跨域所带来的难题,起因是需求方要求打通两个部署在不同域下的产品通道,由一个系统直接调用另一个系统已有的功能页来查询并获取满足条件的产品信息。

由于另一个系统使用cookie来保存用户登陆信息,并存在半小时无操作后失效的限制,所以我们在使用iframe引入该系统功能页面的同时,还设置了定时请求的机制来保持连接。但进入IE下测试时,该方案无效,trace跟踪了很久后,发现是因为iframe页面中,cookie没有办法写进去,所以定时请求失效了。在翻阅了IE相关资料后,发现在IE下,因为存在P3P的隐私保护功能,所以frame(iframe)中如果是嵌入其它域的页面时,是无法正常的操作对应域的cookies值的。最简便的处理就是直接在iframe中的功能页面中加入P3P的认证,即允许第三方读取cookie,这样cookie值才能被正确的存取。

一般正常的cookie只会在一个application中共享,即由创建它的application使用。 但有时候我们需要跨应用或域名设置cookies。如果在同一个域名不同的应用中,可以通过cookie.setPath()的方式来实现;如果是跨域名,可以通过cookie.setDomain的方式来实现。 如果是在一个主系统中放入iframe,让iframe引用不同域名的子系统页面,且同时需要操作子系统的cookies时,就需要在子系统对应的页面或登陆代码中设置P3P 的header来兼容IE浏览器(子系统的cookie机制不能是浏览器进程)。


什么是P3P?
P3P是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie或是否使用该网站。

访问官方P3P网页以获取更多技术信息:http://www.w3.org/P3P

 

### UniApp 解决方案 #### 一、理解问题及其背景 在开发过程中,尤其是在同时涉及 App 和微信小程序的场景下,是一个常见且棘手的问题。不同平台有不同的安全策略和限制条件,这使得请求变得复杂[^1]。 #### 二、针对 H5 平台的具体措施 对于使用 uni-app 进行本地开发并依赖于浏览器调试的情况而言,当尝试通过 IP 地址访问页面并与远程服务器交互时就会遭遇障碍。为了克服这一难题,可以采取特定的技术手段来绕过这些限制[^2]。 #### 三、统一网络请求配置下的实现方法 一种有效的做法是在项目的全局设置里定义基础 URL,并根据不同环境动态调整其值。例如,在非 H5 版本中保持默认路径;而在 H5 中则更改为相对路径 `/dpc` 。此外,还需注意接口地址书写格式正确性——确保以斜杠 (`/`) 开始而非直接指定协议头(`http://`) ,以此防止潜在解析错误的发生[^3]。 ```javascript var BASE_URL = 'http:XXXXXX:9088'; // 非H5默认此地址 // #ifdef H5 BASE_URL = '/dpc'; // #endif export default function(options){ uni.showLoading({ title:'加载中...' }); return new Promise((resolve, reject)=>{ uni.request({ url: `${BASE_URL}${options.url}`, method: options.method || 'GET', data: options.data || {}, success(response) { if (response) { resolve(response.data); } }, fail(error) { reject(error); }, complete() { uni.hideLoading(); } }) }); } ``` #### 四、注意事项与避坑指南 编写 API 接口时要特别留意细节之处。如果省略了必要的前缀字符(如 `http://` 或者 `/`),可能会造成意想不到的结果,比如资源无法找到等问题。因此建议始终遵循标准语法结构来进行编码工作,从而减少不必要的麻烦[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值