分享 Third-Party Cookies Is Dead, Long Live First-Party Cookies

hooopo · 2013年08月25日 · 最后由 ShiningRay 回复于 2013年09月11日 · 4640 次阅读
本帖已被管理员设置为精华贴
1 楼 已删除

😓 智商太低看不懂 demo, 求解释 ETAG 到底啥用处..?

#2 楼 @jjym 跨站 session 这种需求你理解不?比如,淘宝和天猫虽然是两个网站,域名不同,但是他们想共享用户购物车里的商品。

#3 楼 @hooopo 貌似看懂了点...ETAG 就是相当于第三方网站的 session?

nice

在 demo 里,seesion 存放在 dev.seesion.com 里,ETAG 是 seesion_id。 session_id 从 dev.seesion.com 的 ETAG 传递到 dev.app.com 的 cookie 中, 然后在 dev.app.com 中用 cookies 中的 seesion_id 去 dev.seesion.com 取得数据,再 append 到 dev.app.com 的页面里

这相当于用 ETAG + 第三方服务 替代了 第三方 cookie?

#4 楼 @jjym 5 楼解释的不错。至于为什么要这样,是因为其他方案都很难达到跨域标识用户的效果。

#7 楼 @hooopo ....搜了下 HTTP_IF_NONE_MATCH 后明白了

etag 明白 session 也明白,但是 etag + 第三方服务器代替 第三方 cookie 还是不太明白。

#9 楼 @zgm 就是说以前这种需求都是用第三方 cookie 来解决的,demo 里是一种不涉及到第三方 cookie 读写的方案。

#10 楼 @hooopo 原来如此,一直在想 etag 和 cookie 有什么关系,原来是一种替代方案。

可是为什么是 etag, etag 不是有他特殊的使用场景么。

#12 楼 @zgm 如果不是 etag 的话和 session server 没办法沟通 (注意 js 写入的是 app 的 cookie),ajax 用 cahce: true 会把 etag 一起发送到 session server 所以 session server 可以通过 HTTP_IF_NONE_MATCH 取出 etag,也就是 session_id

我刚也卡这里了,不熟悉 http 规范...

#13 楼 @jjym 那 ETAG 原本的使用场景就废了?

#12 楼 @zgm 就是利用浏览器会发送 etag 来检查缓存 相当于这样联系起来

浏览器 -> etag -> session server
session server -> http -> app server
app server -> cookie -> 浏览器

#14 楼 @zgm 只有 session server 操作 session 的几个 action 是把 ETAG 当特殊用途的,app server 完全正常

#16 楼 @jjym ok 明白了,thanks. 👍

#16 楼 @jjym 有时间你分享个关于 eventmachine celluloid actor model reactor pattern 相关的东西吧。

#18 楼 @zgm ..这些我都没实际用过...我分享就把别人都带坑里了..

#13 楼 @jjym

  • 不是 ajax,是 jsonp,因为跨域请求,jquery 自动做的转换
  • 默认浏览器就会发 etag ,cache true 作用是阻止 jquery 在 url 里加随机数,这样 url 变了 etag 就变了

#19 楼 @jjym 看你的 blog 里面都是这类内容。

#20 楼 @hooopo#21 楼 @jjym 我的理解不知道对不对

当访问 app1?name=name 的时候 ajax 请求 session.com,这时候没有 HTTP_IF_NONE_MATCH,拿到的 session_id 为 SecureRandom.hex 然后调用回调,把获取到的 session_id 存为 cookie 然后页面刷新,app1 的后端会把 name=name 这个存到 session.com 的 redis 中

当访问 app2 的时候 ajax 请求 session.com,带着 etag,拿到的 session_id 为刚才 request.env["HTTP_IF_NONE_MATCH"],也就是刚才 app1 中那个 session_id 然后调用回调,把获取到的 session_id 存为 cookie 然后页面刷新,app2 的后端会读取 session.com 中的 redis,拿到 params

我的问题是: etag 是什么时候生成的?etag 是怎么从 app1 到达 app2 的?能给我解释解释么。

#23 楼 @davidqhr etag(特指 session server 的) 不需要到达 app server, etag 只是 client 和 session server 通信用的 (可以看 #15 的关系图), 关于 etag 生成搜索下就有了

#23 楼 @davidqhr #24 楼 @jjym

其实重点是第三方 cookie 的坑,如果没有做过涉及跨站的应用,不会体会到这里有多少坑,也体会不到用 etag+jsonp 这样绕了个圈子模拟了一个简单的服务器设置 cookie 的工作的意义....

总有人把jsonp说成 Ajax..加了两行注释,不理解 jsonp 的可以看这里:http://hooopo.writings.io/articles/7-do-you-know-jsonp

暴漫的 session 总是串,不知是什么原因造成的

#27 楼 @hooopo 膜拜啊!不过我们用的是 rails 一般 Unicorn 的 preload false 的情况下不会出现

需要 登录 后方可回复, 如果你还没有账号请 注册新账号