- 浏览: 1428472 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
场景:
在 xx.com/y.html 代码为:
<iframe id='ok' name='ok' src='http://zz.com/w.htm?authKey=ertwg'></iframe>
w.htm 需要根据 authKey 写入 cookie ,授权 y.html 嵌入 zz.com 站点的其他页面(例如即时重定向到另一个页面显示写入的 cookie )。
w.htm 内容为:
if (request.getParameter("authKey") != null) { response.addCookie(new Cookie("logined", "ok")); response.sendRedirect(request.getContextPath() + request.getServletPath()); } else { Cookie[] cs = request.getCookies(); if (cs != null) { for (Cookie c : cs) { if (c.getName().equals("logined")) { response.getWriter().println("logined : " + c.getValue()); } } } }
问题 :
但是在 ie6,7 以及 safari 中发现 cookie 并没有被写入,重定向的读页面读不出刚刚设置的cookie。
解决:
涉及到 p3p 简洁策略 的设置以及在 safari 下的特殊处理:
ie6,7
需要在 w.htm 的返回响应中加入 p3p 简明策略响应头:
// ie need this response.addHeader("P3P", "CP=\"CAO PSA OUR\"");
允许在嵌入自己情况下写入cookie。
safari
不能直接通过 iframe.src 来请求第三方页面,需要通过表单 post 提交来允许第三方页面 cookie 写入 :
S.use("ua,dom", function(S, UA, DOM) { var ok = S.get("#ok"); var action = "http://zz.com/w.htm?authKey=ssdf"; if (UA.safari) { var form = DOM.create("<form " + " method='post' " + "action='" + action + "'" + " target='ok'" + " style='position: absolute;left: -9999;top: -9999px'>"); DOM.append(form,document.body); DOM.append(DOM.create("<input name='authKey' value='ssdf'/>"), form); form.submit(); } else { ok.src = action; } });
update 2011-05-26
1.该问题和 iframe 没有关系,只要是当前页面往第三方页面发送 get 请求,该 get 请求无论是通过 iframe发送,还是通过 img.src 或者通过 script.src ,第三方页面都会写不进 cookie.
2.多次重定向以及 https 情景下依然可用。
场景:
http://a.com/demo.html 嵌入 iframe 页面 http://b.com/cookie.htm?set=2
a.com/demo.html :
<iframe src='http://b.com/cookie.htm?set=2'></iframe>
b.com/cookie.htm :
if (request.getParameter("set") != null) { // ie need this //response.addHeader("P3P", "CP=\"CAO PSA OUR\""); String set = request.getParameter("set"); if (set.equals("1")) { System.out.println(request.getPathInfo()); response.addCookie(new Cookie("logined", "ok")); response.sendRedirect(request.getContextPath() + request.getServletPath()); } else { response.sendRedirect("https://a.com/iframe_post.html"); } } else { Cookie[] cs = request.getCookies(); if (cs != null) { for (Cookie c : cs) { if (c.getName().equals("logined")) { response.getWriter().println("logined : " + c.getValue()); } } } }
会使得 a.com 中的 iframe 跳转多次,
iframe -> b.com/cookie.htm?set=2 -> https://a.com/iframe_post.htm
a.com/iframe_post.htm 会再次发送请求给 b.com/cookie.htm?set=1 ,这时会设置 cookie:
a.com/iframe_post.htm :
<meta charset='utf-8'/> <script type="text/javascript" src="../../base/javascript/kissy.js"></script> <script type="text/javascript"> KISSY.ready(function(S) { S.use("ua,dom", function(S, UA, DOM) { var ok = S.get("#ok"); var action = "https://b.com/cookies?set=1"; if (UA.safari) { var form = DOM.create("<form " + " method='post' " + "action='" + action + "'" + " style='position: absolute;left: -9999;top: -9999px'>"); DOM.append(form,document.body); DOM.append(DOM.create("<input name='set' value='1'/>"), form); form.submit(); } else { window.location = action; } }); }); </script>
关键在于设置 cookie 前的这一请求在 safari 下必须为 post 过去的!即 a.com/iframe_post.html 中的 UA 判断,通过 form 提交使得自身跳转到 b.com/cookie.htm
发表评论
-
continuation, cps
2013-09-12 16:49 2698起 随着 nodejs 的兴起,异步编程成为一种潮流 ... -
一种基于匹配回朔的 css3 选择器引擎实现
2013-05-07 20:40 3333一种基于匹配回朔的 css3 选择器引擎实现 介绍 C ... -
cubic-bezier 模拟实现
2013-01-05 16:34 13992cubic-bezier 曲线是 css3 动画的一个重要基石 ... -
构建前端 DSL
2012-10-11 22:10 5270目前在传统的软件开 ... -
Get cursor position and coordinates from textarea
2012-04-10 20:50 4910最近需要从 textarea 中获 ... -
兼容 ie 的 transform
2012-02-23 14:00 6315css 2d transform 是 css3 引入的一个新的 ... -
promise api 与应用场景
2012-02-07 17:34 7261promise 是 commonjs 社区中提出的异步规范,其 ... -
closure compiler 代码优化实例
2012-01-08 03:23 2755closure compiler 可以进行不少有意思的优化 ... -
write html parser
2011-12-01 02:48 2832首先需要声明 html 不能用正则表达式来直接匹配进行内容抽取 ... -
获取剪贴板数据
2011-11-07 23:31 6357兼容性: 获取剪贴板数据这块各个浏览器间存在很大的 ... -
url 映射问题
2011-11-07 21:52 3150背景 url mapping 我最早知道是作为 j ... -
tip:如何原生播放声音
2011-10-19 12:45 2868如果不想考虑浏览器间 ... -
转载:瀑布流布局浅析
2011-09-29 19:02 2772简介 如果你经 ... -
cross domain request
2011-09-29 18:39 2775场景 跨域请求是随着 ... -
基于多继承的树设计
2011-09-18 03:42 2187分类 树是一种常见 ... -
caja 原理 : 前端
2011-09-01 16:48 6910作为前端开放的基础安全保证,caja 是目前比较合 ... -
tokenization of html
2011-08-29 22:38 2659html 符号解析问题 场景: 在页面上输出包 ... -
ie 下 cloneNode 导致的属性克隆
2011-08-24 16:10 2398这个还是很值得记下,一直存在的很大隐患终于解决,由于在 ie& ... -
循环引用下的深度克隆
2011-08-04 20:39 2220深度复制和浅度复制 是当初初学 c 遇到的第一批问题,似乎使 ... -
模块的静态与动态循环依赖
2011-07-25 03:43 3176场景: 循环依赖 我是不支持的,但现实中似乎又确实需 ...
相关推荐
JavaScript检测浏览器cookie是否已经启动,代码稍显复杂,通过写入一个测试cookie判断cookie是否已经启动 var dt = new Date(); dt.setSeconds(dt.getSeconds() + 60); [removed] = cookietest=1; expires= + dt....
博客园服务器曾遭遇过这个问题,我为此写过一篇博文(cnzz统计代码引起的Bad Request – Request Too Long),问题的原因是第三方统计服务cnzz的统计代码写入大量的cookie,请求时会携带着这些cookie,从而造成请求...
目前, 市面上 做统计的第三方平台有很多, 比如最出名的Google的GTM统计,友盟统计等等. 但是 这些统计, 第一点,就是上传的频率,比较固定, 难以满足要求不同的频次需求. 第二点,需要统计到的字段和规则都是死板
8.5 第三方Go测试库 217 8.5.1 Gocheck测试包简介 217 8.5.2 Ginkgo测试框架简介 223 8.6 小结 228 第9章 发挥Go的并发优势 230 9.1 并发与并行的区别 230 9.2 goroutine 232 9.2.1 使用...
2. 高安全性,独立自主,所有的程序数据,交易记录,商品图片信息等都安全的放到自己的服务器里面,不需要依赖任何第三方,不受任何第三方约束,你的就是你的! 3. 产品品质突出,无论从代码的架构设计,还是从编写...
6、新增“类_任务栏”可以显示隐藏任何第三方窗口图标,相当于易中的(不在任务栏显示),带【实例】演示。 7、新增“类_线程池1”中的“等待”方法。 8、修复“编码_Utf8到Ansi“分配内存失败BUG,感谢易友【仁鹰】...
优化:https模式下对第三方分享代码做了兼容3.优化:联系页面百度地图的调用增加了对https协议的支持闪灵CMS新闻门户系统 v5.0 build20191018更新说明1.修复:修复了在同步本地文件到OSS时一个文件出错就终止上传的...
第三章表单基本设计 3-1 HTML Control 3-1-1在网页动态显示图片 3-1-2上传文件 3-1-3动态产生表格列及单元格 3-2 WebControl 3-2-1使用月历执行查询 3-2-2使用验证规则 3-2-3使用组合方块...
第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18 3.2.2页面回退...
介绍了一种常用的驱动程序编写方法,该方法允许在编写驱动程序时忽略特定于平台的问题,如字节存储顺序(endianness)和数据排序等。 其他主题包括:强化Solaris驱动程序;电源管理;驱动程序自动配置;程控I/O;直接...